Tôi đang xây dựng một ứng dụng web liên quan đến việc kéo và thả văn bản từ bên trong trang web và từ các ứng dụng khác ví dụ như tài liệu từ và pdf. Tôi cần để có được trạng thái hiện tại của con chuột nếu nó xuống (nhấp) hoặc lên (phát hành). Hiện tại tôi có thể nhận trạng thái hiện tại của con chuột nếu tôi đang kéo văn bản trong trang web nhưng không thể nhận trạng thái chuột nếu chuột đến từ một ứng dụng khác nói từ và kéo một số văn bản. Bất kỳ con trỏ nào để có được trạng thái xuống hoặc lên của chuột đều thực sự được đánh giá cao.phát hiện trạng thái hiện tại của một con chuột trong javascript hoặc jquery tức là xuống hoặc lên
phát hiện trạng thái hiện tại của một con chuột trong javascript hoặc jquery tức là xuống hoặc lên
Trả lời
Vấn đề như tôi hiểu nó là bạn cần phải xác định xem nút chuột trái được nhấn nếu nó được ép bên ngoài cửa sổ (đối với một thao tác kéo).
Có một số vấn đề:
- không có sự kiện MouseMove sa thải trong một hoạt động kéo
- dữ liệu của các quốc gia nút hiện tại khác nhau giữa các trình duyệt
tôi đã đưa ra với điều này giải pháp:
/**
* keeps track of the current active mouse button.
* @param notifier {Function} called when the active button is updated.
* @param oneCallPerStateChange {Boolean} (defaults to false) if true the notifier will be called only when the active button changes.
*/
function initActiveButtonWatcher(notifier, oneCallPerStateChange) {
// create variable to store button states.
var _activeButton = -1, activeButton = 0
// function to set the current active button.
function updateMouseState(e) {
// update active button.
activeButton = typeof e.buttons === "number" ? e.buttons : e.which
// notify if the active button is different.
if (oneCallPerStateChange? (_activeButton !== activeButton && typeof notifier === "function") : (typeof notifier === "function")) {
notifier(activeButton)
}
// store the last state in order to be able to tell if the state has changed.
_activeButton = activeButton
}
// function to get the current active button.
function getButtonState() { return activeButton }
// update the button state when the mouse is moved
// or an item is dragged into the window.
window.addEventListener("mousemove", updateMouseState, false)
window.addEventListener("dragover", function() { updateMouseState({which: 1}) }, false)
window.addEventListener("dragleave", function() { updateMouseState({which: 0}) }, false)
// expose the getter on the global object.
window.getButtonState = getButtonState
}
các giải pháp trên liên kết với các sự kiện mousemove và sự kiện kéo. Chrome nhận đối tượng sự kiện hợp lệ với các giá trị nút chính xác trong sự kiện kéo, tuy nhiên tôi thấy rằng FireFox không. Tôi tìm trạng thái của nút chuột trái khá rõ ràng trong quá trình kéo, nó sẽ là được nhấn, phải không? Bạn không thể kéo mà không cần nhấp và di chuyển. Vì vậy, tôi chỉ cần đặt trạng thái là 1 (trái xuống) khi di chuyển.Tương tự như vậy, trên dragleave, giá trị được đặt thành 0.
Bạn sẽ thực hiện tất cả thao tác kéo, kéo, kết thúc, thả, v.v. thông thường để ngăn các hành động trình duyệt mặc định và giá trị trả về bởi window.getButtonState() luôn là giá trị của nút chuột hiện đang hoạt động.
Dưới đây là một số cách sử dụng ví dụ mà đặt giá trị của thẻ h1 đầu tiên trong trang để nút hiện ép:
;(function() {
var active = document.getElementsByTagName("h1")[0]
function translate(n) {
switch (n) {
case 0:
return "none"
break;
case 1:
return "left"
break;
case 2: case 4: // Firefox calls it 4, the values differ between browsers I find.
return "middle"
break;
case 3:
return "right"
}
}
initActiveButtonWatcher(
function(currentActive) {
active.innerHTML = "Active button: " + translate(currentActive)
}
)
})()
Bạn sẽ phải làm một số trình duyệt tinh chỉnh chéo để xử lý các giá trị khác nhau (FF báo cáo 4 cho nút giữa, vv) nhưng bạn sẽ có thể nhận được nút hiện tại hợp lý tốt với phương pháp này.
Hãy thử nó ra: http://jsfiddle.net/6BUA4/
Có một biến với nhà nước: Demo - Code
var _isMouseDown = false;
$(document).on("mousedown", function(event) {
_isMouseDown = true;
});
$(document).on("mouseup", function(event) {
_isMouseDown = false;
});
Sau đó, bạn có thể kiểm tra _isMouseDown
để xem nếu chuột xuống.
$(document).on("mousedown mouseup", function(event) {
_isMouseDown = event.type == "mousedown";
});
Nếu bạn không muốn biến toàn cầu bạn có thể lưu _isMouseDown
ném data
phương pháp của jQuery: Demo - Code
$(document).on("mousedown mouseup", function(event) {
$(this).data("_isMouseDown", (event.type == "mousedown"));
});
Và kiểm tra ném: $(document).data("_isMouseDown")
Cảm ơn bạn đã trả lời, nhưng điều này không hoạt động nếu chuột nếu đến từ một ứng dụng khác nói pdf và kéo một số văn bản. Đó là những gì đang tìm kiếm, xin lỗi nếu tôi không rõ ràng trong câu hỏi –
Ahh okay. Đây thực sự là một câu hỏi hay :) – andlrc
Bạn đang tìm kiếm mới HTML5 kéo mạnh mẽ và thả http://www.w3schools.com/html/html5_draganddrop.asp
Sự kiện bạn đang tìm kiếm là "thả"
<div id="droppable"
ondragover="event.preventDefault()"
ondrop="event.preventDefault();
console.log(event);
console.log(event.dataTransfer.getData('text/plain'))">
Tất nhiên bạn nên di chuyển mã này vào file js, nhưng điều này cho bạn ví dụ những gì đã được thực hiện. Bạn có thể muốn đọc nội dung bên trong mà thả bên ngoài, thậm chí sử dụng nó để tải lên.
Dưới đây là thông tin chi tiết về event.dataTransfer http://www.tutorialspoint.com/html5/html5_drag_drop.htm
Khi bạn chọn văn bản trong một chương trình bên ngoài (như Word) và kéo nó lên một trang web, các yếu tố trên trang này sẽ tạo dragenter
sự kiện chuột. Tôi đã thử nghiệm điều này trong Chrome và nó đã làm việc cho tôi. Ví dụ, tôi có thể ràng buộc một người biết lắng nghe dragenter
để document.body và nhận các sự kiện mặc dù có sự kiện nào chuột bình thường được bắn:
function logEvent(e) {
console.log(e);
}
document.body.addEventListener('dragenter', logEvent);
// MouseEvent {dataTransfer: Clipboard, toElement: body, ..., button: 0, ...}
lẽ bạn có thể sử dụng điều này để lợi thế của bạn, kể từ khi sự kiện dragenter
có nghĩa là chuột đang kéo và nút phải được nhấn. Ngoài ra, bạn có thể nhận được các văn bản bị kéo bằng cách nhận dữ liệu từ sự kiện:
e.dataTransfer.getData('text/plain');
Bạn cần phải sử dụng các kiểu dữ liệu chính xác trong getData
gọi. Tôi đã nhập một số văn bản vào Word và có thể lấy văn bản đã kéo đó bằng text/plain
.
- 1. Trạng thái hiện tại của GWT là gì?
- 2. Cách phát hiện trạng thái hiện tại trong chỉ thị
- 3. Phát hiện tâm trạng của một tweet hoặc tin nhắn
- 4. Trạng thái phát hiện phát hiện vấn đề trong DataGridView
- 5. Trạng thái hiện tại của PocoCapsule là gì?
- 6. Có thể tìm khoảng cách từ dưới lên đến trạng thái cuộn hiện tại trong jquery
- 7. Phát hiện hủy trong điều hướng bằng Javascript hoặc jQuery
- 8. Phát hiện người dùng cuộn xuống hoặc di chuyển lên trong jQuery
- 9. Cách phát hiện iOS hiện tại là 4.1 hoặc 4.2?
- 10. Thay đổi con trỏ chuột trong Javascript hoặc jQuery
- 11. Trạng thái hiện tại của đặc tả Cookie2 là gì?
- 12. Phát hiện jquery-ui accordion trạng thái mở/đóng
- 13. Phát hiện số hoặc chữ cái bằng jquery/javascript?
- 14. Phát hiện trạng thái video Youtube từ JavaScript
- 15. Làm thế nào để phát hiện xem một listview đang cuộn lên hoặc xuống trong android?
- 16. Trạng thái hiện tại của kiểm tra kiểu tĩnh JavaScript là gì?
- 17. Phát hiện trạng thái nguồn USB
- 18. Trạng thái đóng cửa hiện tại trong Java là gì?
- 19. javascript hoặc tùy chọn PHP để phát hiện tình trạng AIM
- 20. jQuery - phát hiện nếu con chuột vẫn còn?
- 21. Phát hiện trạng thái cuộc gọi trong iOS4
- 22. jQuery - chuyển đổi dọc lên (tức là không xuống)
- 23. Phát hiện bàn di chuột và chuột trong Javascript
- 24. Trạng thái hiện tại của Mono trên Linux?
- 25. lấy loại con trỏ chuột hiện tại
- 26. Có thể thực hiện menu thả xuống không có Javascript hoặc Jquery
- 27. phát hiện con trỏ chuột qua một Path2D
- 28. Phát hiện kéo hoặc kéo của UICollectionView
- 29. Trạng thái hiện tại của nghệ thuật trong khung công tác web Haskell là gì
- 30. Cách nhận trạng thái hiện tại từ lớp bbv.Common.StateMachine (hiện tại là Appccelerate.StateMachine)?
Khi kéo và thả từ nội dung bên ngoài, có vẻ như trang chỉ được kích hoạt sau DROP. –