2017-11-09 25 views
7

Tôi có một ứng dụng mà các phần tử bên trong của phần tử SVG có thể được kéo và thả (nhờ d3-dragd3-zoom, xem https://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084 làm ví dụ cho trang như vậy) cũng có thể được sử dụng trên các thiết bị hỗ trợ cảm ứng. sau một thời gian dài, một menu ngữ cảnh hiện lên (ít nhất là trong IE11, Edge và Firefox) và đang trên đường đi, do đó tôi muốn ngăn menu ngữ cảnh hiển thị trong trường hợp này.Sự kiện ngữ cảnh rõ ràng là kết quả của hành động chạm?

Tôi chỉ có thể không cho phép hiển thị menu ngữ cảnh nói chung bằng cách xử lý sự kiện contextmenu và làm .preventDefault() trên đối tượng sự kiện nhưng tôi tự hỏi liệu giải pháp có tồn tại hay không. hiển thị cho ví dụ nhấp chuột phải hoặc khi menu key được nhấn trong khi phần tử có tiêu điểm.

tôi nghĩ lúc đầu tôi có thể nhìn vào .button.buttons thuộc tính của đối tượng sự kiện nhưng nó có vẻ như những giá trị đó là tùy tiện 0 hoặc 2 và có vẻ như nó có thể được tìm thấy trong bất kỳ sự kết hợp khi kiểm tra trong các trình duyệt khác nhau trên khác nhau hệ thống.

Phần tử đã có touch-action: none.

Có cách nào để làm cho trình đơn ngữ cảnh không hiển thị kết quả của một lần bấm dài không?

It looks like .preventDefault() on the relevant touch events wouldn't be an option.

+0

Tôi nghĩ rằng bạn có thể biến cảm ứng hành động trở lại và sử dụng 'touchmove' và 'sự kiện touchend' để xác định có hay không để mở ContextMenu. Ví dụ: trên một 'touchmove', bạn có thể đặt một cờ mà nhấn và giữ lâu sẽ bị bỏ qua. sau đó trên 'touchend' bạn có thể tắt cờ. trong trình xử lý sự kiện 'contextmenu' chỉ cần kiểm tra cờ. Điều đó có ý nghĩa? – Potter

+0

@Potter Âm thanh đầy hứa hẹn nhưng tôi sẽ phải thử một cách chi tiết, ví dụ: cho dù sẽ không có bất kỳ điều kiện chủng tộc nào, ví dụ: cho dù sự kiện 'contextmenu' thực sự chỉ được kích hoạt sau các sự kiện liên lạc có liên quan trên tất cả các trình duyệt và nền tảng. Tôi chỉ biết rằng ngay cả trong trường hợp chuột có sự khác biệt mà trên một số hệ thống đó là báo chí của nút chuột phải mà gây ra menu ngữ cảnh trong khi trên những người khác đó là phát hành. – phk

+0

@Potter Ngoài ra, về mặt lý thuyết tôi có thể giao dịch với những người dùng đang chuyển đổi và do đó pha trộn mọi thứ nhưng tôi đoán đó là một trường hợp cạnh mà không đáng lo ngại. Tôi bắt đầu nghĩ rằng có thể chỉ ngăn chặn tất cả các sự kiện 'contextmenu' không tệ đến vậy, người dùng trung bình của bạn không sử dụng nó nhiều và nếu chỉ trên các liên kết mà tôi đoán tôi có thể cho phép nó một lần nữa. Những gì bị mất là các tính năng như ví dụ: trong Edge, bạn có thể nhấp chuột phải vào một SVG (thậm chí là những cái được tạo động) và tải xuống nó nhưng trong trường hợp của tôi nó bị hỏng (vì CSS và ext. refs). – phk

Trả lời

2

jQuery UI cảm ứng punch chỉ giải quyết được tất cả.

Đây là Hỗ trợ sự kiện chạm cho giao diện người dùng jQuery. Về cơ bản, nó chỉ dây liên lạc sự kiện trở lại giao diện người dùng jQuery. Thử nghiệm trên iPad, iPhone, Android và các thiết bị di động hỗ trợ cảm ứng khác. Tôi đã sử dụng jQuery UI có thể sắp xếp và nó hoạt động giống như một sự quyến rũ.

http://touchpunch.furf.com/

+0

Trong trường hợp của tôi 'd3' đã thực hiện tất cả xử lý sự kiện cảm ứng cho tôi vì vậy tôi không muốn một thư viện khác. Tôi đang tìm một giải pháp cấp thấp. – phk

+0

Cool sau đó bạn có thể cho tôi xem mã của bạn –

+0

Nếu nó hoạt động trên https://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084 (trong tất cả các kết hợp trình duyệt/hệ điều hành) thì có thể nó cũng hoạt động trong ứng dụng của tôi. – phk

Các vấn đề liên quan