2012-04-12 18 views
6

Tôi đang cố gắng điều chỉnh một số mã từ một ứng dụng đơn giản sử dụng Raphael để cho phép người dùng vẽ hình tròn và hình chữ nhật trên canvas. (mã gốc tại https://gist.github.com/673186)Giải pháp trình duyệt chéo để thay thế việc sử dụng event.layerX và event.layerY

Mã gốc sử dụng phiên bản cũ hơn của jQuery và hoạt động tốt. Xem http://jsfiddle.net/GHZSd/

Sử dụng phiên bản cập nhật của jQuery, tuy nhiên, phá vỡ ví dụ. Xem http://jsfiddle.net/GHZSd/1/

Lý do cho điều này là event.layerX và event.layerY không còn được định nghĩa trong phiên bản mới của jQuery. Câu hỏi của tôi là - tôi có thể sử dụng mã nào để thay thế các giá trị đó? Tôi đã thử một vài điều chỉ bằng cách thực hiện một số phép toán (event.originalEvent.layerX/layerX vẫn tồn tại bây giờ vì vậy tôi chỉ đang cố thêm/bớt một số thứ sẽ dẫn đến các giá trị đó) nhưng cho đến nay trình duyệt không hoạt động trên tất cả chúng.

Xin lỗi nếu điều này đã được hỏi trước nhưng tôi không thể tìm thấy câu trả lời cụ thể về SO hoặc bất kỳ nơi nào khác.

+0

Chào mừng bạn đến với niềm vui của sự phụ thuộc thư viện. Bạn chỉ có thể ở lại với jQuery cũ hơn (tại sao bạn nâng cấp?) Hoặc tìm hiểu cách các lớp được triển khai trong phiên bản cũ hơn và triển khai lại chúng trong phiên bản mới hơn. – RobG

+0

Tôi không hiểu tại sao bạn không sử dụng các sự kiện gốc, nó hoạt động tốt: http://jsfiddle.net/GHZSd/19/ – mddw

+0

@RobG - Tôi cần một phiên bản cập nhật của jQuery cho các yếu tố khác của dự án của tôi. – zeke

Trả lời

9

Vì vậy, tôi đã suy nghĩ một chút về vấn đề này, vì nhóm Chrome muốn xóa layerX và layerY vì những lý do lạ.

Đầu tiên, chúng ta cần vị trí của container của bạn:

var position = $paper.offset(); 

(cho những người đọc mà không fiddle mở, $ giấy là div nơi svg sẽ được rút ra)

Nó cung cấp cho chúng ta hai coords, position.topposition.left, vì vậy chúng tôi biết vị trí trong trang là vùng chứa.

Sau đó, khi nhấp, chúng tôi sử dụng e.pageXe.pageY, là các hợp đồng của trang. Để thi đua layerX và layerY, chúng tôi sử dụng (e.pageX - position.left)(e.pageY - position.top)

Et thì đấy: http://jsfiddle.net/GHZSd/30/

Hoạt động trên Chrome, Safari, FF và Opera.

+0

Vâng, nó hoạt động. Tôi đã đến một giải pháp tương tự. Một điều kỳ lạ là, trong khi điều này làm việc tốt trong ví dụ tôi đăng, trong ứng dụng của tôi mà tôi đang làm việc trên có sự khác biệt 1 pixel cho cả X và Y khi sử dụng Chrome. Không phải là một vấn đề lớn và có một số thuộc tính khác trong đó tôi có thể thêm vào phương trình để làm cho mọi thứ bằng với originalEvent.layerX/layerY trong tất cả các trình duyệt. Vì vậy, không chắc chắn nếu đây là cách tiếp cận tốt nhất nhưng nó có vẻ làm việc ... – zeke

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