2012-06-08 11 views
5

tôi đã thực hiện pointer-events: none trên một yếu tố Raphael sử dụng jQuery như thế này:con trỏ-sự kiện: none VML giải pháp raphael

var raphaelElement = Raphael.ellipse(x,y,w,h); 
$(raphaelElement.node).css({'pointer-events': 'none'}); 

này hoạt động tốt nhưng tất nhiên trong IE8, Raphael sử dụng VML thay vì SVG và giải pháp này không thành công .

Có ai có giải pháp khác về cơ bản làm cho yếu tố Raphael bỏ qua các sự kiện hay không.

Trả lời

7

Cách duy nhất để thực hiện tác phẩm này với IE8 (trở về trước) sẽ được thực sự bắt sự kiện này, và trong xử lý sự kiện:

  1. ẩn phần tử (.style.display='none')
  2. sử dụng phương pháp elementFromPoint() để tìm phần tử tiếp theo dưới 'bắt'
  3. re-create and fire the event on that element (xem thêm this)
  4. hiển thị catcher một lần nữa (.style.display='')

Cách tiếp cận chung này (trừ bước 3) đã được sử dụng trong hơn 10 năm trên IE để cho phép người dùng kéo một phần tử trực tiếp vào con trỏ trong khi vẫn phát hiện 'di chuột' của các phần tử thả xuống có thể có bên dưới.

+0

đẹp. rất. lần đầu tiên tôi chia sẻ một liên kết mà không phải là của riêng tôi :) –

+0

Tôi đang chạy trong cùng một vấn đề với Raphael và cố gắng giải pháp của bạn. Nhưng trong phần tử IE8 elementFromPoint trả về null thay cho phần tử cơ bản. ElementFromPoint của IE8 có bị hỏng không? Có lo lắng không? – Fabian

+0

@Fabian Đặt câu hỏi này là câu hỏi riêng của mình cùng với một trường hợp kiểm tra đủ khả năng tái sản xuất. – Phrogz