Làm cách nào để dừng việc truyền bá sự kiện bằng cách nhấn chuột phải vào Leaflet?


9

Tôi đã không tìm thấy một sự kiện đúng trong các điểm đánh dấu trên tờ rơi vì vậy tôi bắt đầu nghe sự kiện mousedown. Trong phương pháp giải quyết sự kiện này, tôi kiểm tra

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

Điều này không hoạt động trong đó do_s Something () được gọi, nhưng sự kiện lan truyền đến bản đồ và một bối cảnh đang được hiển thị. Làm cách nào để ngăn chặn sự kiện lan truyền đến bản đồ?

Điều này có hoạt động trong tất cả các trình duyệt chính (ví dụ IE) không?

Câu trả lời:


4

Câu trả lời đầu tiên của tôi rõ ràng là không hoạt động và vì bây giờ tôi đang đối mặt với cùng một vấn đề. Đây là một cách tiếp cận mới:

Tờ rơi hỗ trợ một sự kiện được gọi là contextmenu. Như được tìm thấy trong tài liệu sự kiện Tờ rơi ở đây .

Được kích hoạt khi người dùng nhấn nút chuột phải trên bản đồ, ngăn menu ngữ cảnh trình duyệt mặc định hiển thị nếu có người nghe về sự kiện này.

Về lý thuyết mã

marker.on('contextmenu', function(e) {
  this.openPopup();
});

nên làm việc tốt Nhưng rõ ràng việc thực hiện chậm trễ phía sau các tài liệu. Tính đến bây giờ (Tờ rơi 0.4.5) các contextmenusự kiện dường như không chưa được hỗ trợ trên các dấu hiệu, mặc dù nó hoạt động hoàn toàn tốt đẹp trên các đối tượng polyline.

Dường như có công việc trong đường ống để kích hoạt tính năng này trong tương lai gần (xem các cuộc thảo luận ở đâyở đây ). Vì vậy, tôi đoán rằng chúng ta chỉ có thể hy vọng rằng Leaflet hoạt động nhanh chóng và kích hoạt sự kiện này trong phiên bản tiếp theo ...

Chỉnh sửa: Bỏ qua những gì tôi đã nói về việc chờ đợi để thực hiện. Nếu bạn tải xuống nhánh chính phát triển mới nhất và tự xây dựng tờ rơi, bạn sẽ nhận được hỗ trợ đầy đủ cho contextmenucác sự kiện trên các điểm đánh dấu. Chúc mừng mã hóa.


4

Ngăn chặn hành vi mặc định trong IE và tất cả các trình duyệt khác:

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

Nó dường như không hoạt động. Bạn đã thử nghiệm điều này trong Tờ rơi? Và sự kiện của bạn là sự kiện tờ rơi hay DOMMouseEvent ban đầu bị trình duyệt bắn?
mrg

Đây là một sự kiện DOM. Nếu Leaflet kết thúc các sự kiện, hãy sử dụng event.origenEvent.
tmcw

4

Hãy thử chức năng nội bộ này:

L.DomEvent.stopPropagation(event);

Nó sẽ làm các trick.

PS Tôi không bao giờ thấy rằng trong bất kỳ tài liệu nào nhưng thấy nó được sử dụng trong một bản vá. Sử dụng có nguy cơ của riêng bạn. ;)

Chỉnh sửa: Tôi cũng tìm thấy chức năng nội bộ này

L.DomEvent.preventDefault(event);

Điều này dường như rất giống với event.preventDefault()trong jQuery.


Tôi đã sử dụng đoạn trích của bạn, nhưng những gì xảy ra cũng giống như với giải pháp của tmcw. Tôi nhấn vào điểm đánh dấu của tôi. Nó đi đến phương pháp nghe. Ở đó, nó loại bỏ điểm đánh dấu (đó là điều mà rightclick nên làm cho tôi) và sau đó một menu ngữ cảnh mở ra trên bản đồ nơi tôi nhấp vào như thể toàn bộ điều đánh dấu đã không xảy ra.
mrg

Tình cờ tôi mới tìm thấy thứ này L.DomEvent.preventDefault(event);. Từ những gì tôi đã thấy (nhìn vào nguồn Leaflet.js), nó sẽ rất giống với nguồn preventDefault()cung cấp bởi jQuery ... Hãy dùng thử! :)
fgysin phục hồi Monica

Tôi đã thử nó, nhưng ngữ cảnh tiêu chuẩn tôi nhận được trong FF khi tôi nhấp chuột phải vào một trang html tiếp tục bật lên.
mrg

2

Tôi đã có một giải pháp tình cờ cho sự kiện dừng lại.

Ví dụ: nếu một sự kiện được tạo như thế này - map.on("click", onMapClick);, sự kiện có thể bị dừng với mã này -map.off("click", onMapClick);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.