2010-01-05 32 views
7

Tôi đang cố gắng phát hiện sự kiện di chuột trên một vòng tròn. Tôi xác định div vòng tròn như thế này:Phát hiện chính xác sự kiện di chuột cho một div có góc tròn

.circle { 
    width: 80px; 
    height: 80px; 
    -moz-border-radius: 40px; 
    -webkit-border-radius: 40px; 
    background-color: #33f; 
} 

Sau đó, tôi phát hiện ra sự mousover sử dụng jQuery như thế này:

$('.circle').mouseover(function() { 
    $(this).css({backgroundColor:'#f33'}); 
}); 

này hoạt động tốt, ngoại trừ việc toàn bộ 80px 80px bởi khu vực gây nên sự kiện mouseover. Nói cách khác, chỉ cần chạm vào góc dưới cùng bên phải của div sẽ kích hoạt sự kiện di chuột, ngay cả khi chuột không nằm trong vòng tròn hiển thị.

Có cách nào thân thiện và đơn giản để kích hoạt sự kiện di chuột trong vùng hình tròn không?

Cập nhật: Vì lợi ích của câu hỏi này, hãy giả sử rằng trình duyệt có khả năng CSS3 và hiển thị chính xác bán kính đường viền. Có ai có kỹ năng toán học/hình học điên để đưa ra một phương trình đơn giản để phát hiện liệu con chuột đã đi vào vòng tròn chưa? Để làm cho nó đơn giản hơn, hãy giả sử rằng nó là một hình tròn và không phải là bán kính biên giới tùy ý.

Trả lời

15

Chỉ cần bỏ qua sự kiện di chuột nếu vị trí của chuột quá xa. Nó thực sự đơn giản. Lấy điểm trung tâm của div, và tính toán khoảng cách đến con trỏ chuột (khoảng cách công thức = sqrt((x2 - x1)^2 + (y2 - y1)^2)) và nếu nó lớn hơn bán kính của vòng tròn (một nửa chiều rộng của div), nó không có trong vòng tròn được nêu ra.

+3

Demo: http : //jsbin.com/oqewo (nguồn xem) –

4

Không, không có. Hãy suy nghĩ về các thuật ngữ hình học. Bạn vẫn đang sử dụng một div, đó là một phần tử hộp. Phần tử hộp đó có ranh giới hình chữ nhật cụ thể kích hoạt chuột qua sự kiện. Việc sử dụng CSS để cung cấp đường viền tròn chỉ là mỹ phẩm và không thay đổi ranh giới hình chữ nhật của phần tử đó.

0

Nếu bạn muốn làm việc đó như bạn định làm, nó sẽ yêu cầu số lượng đáng kể tính toán. Bất cứ khi nào một con chuột đi vào một đối tượng, trước tiên bạn phải tìm hiểu xem nó có làm tròn các góc (có trong các trình duyệt khác nhau) hay không, sau đó tính toán nếu con trỏ thực sự nằm trong các góc đó, và nếu có, hãy áp dụng một lớp di chuột.

Dường như không đáng giá lắm.

2

Bạn có thể làm điều gì đó tương tự với bản đồ hình ảnh cổ điển - có một khu vực hình tròn.
Trong thực tế, plugin này có thể giúp bạn: jQuery MapHilight Plugin

0

Dưới đây là một snnipet để tính toán khoảng cách betewwn hai điểm (trung tâm của vòng tròn, và mouseX/mouseY) sử dụng Javascript: http://snipplr.com/view/47207/

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