2016-04-21 16 views
5

Tôi muốn sử dụng một câu lệnh if để kiểm tra xem chuột là bên trong một div nào đó, một cái gì đó như thế này:Kiểm tra xem chuột là bên trong div

if (mouse is inside #element) { 
// do something 
} else { 
return; 
} 

này sẽ dẫn đến chức năng để bắt đầu khi con chuột là bên trong #element và dừng khi chuột ở bên ngoài #element.

+2

Tại sao không treo một event handler cho 'mouseenter' /' mouseover 'cho phần tử bạn cần? –

+0

Bạn có thể làm điều đó bằng cách sử dụng 'getElementFromPoint()', nhưng hooking trực tiếp vào sự kiện trên phần tử sẽ đáng tin cậy hơn và thực hành tốt hơn IMO. –

Trả lời

7

bạn có thể đăng ký xử lý jQuery:

var isOnDiv = false; 
$(yourDiv).mouseenter(function(){isOnDiv=true;}); 
$(yourDiv).mouseleave(function(){isOnDiv=false;}); 

không jQuery thay thế:

document.getElementById("element").addEventListener("mouseenter", function() {isOnDiv=true;}); 
document.getElementById("element").addEventListener("mouseout", function() {isOnDiv=false;}); 

và somewhereelse:

if (isOnDiv===true) { 
// do something 
} else { 
return; 
} 
+1

cảm ơn! đó là những gì tôi đang tìm kiếm. Ngớ ngẩn mà tôi không thể nghĩ rằng bản thân mình –

+1

Điều này dựa trên kích hoạt của những sự kiện để đi qua, mà không phải là đáng tin cậy khi có các yếu tố chồng chéo trên mặt phẳng z. – maxhud

0
$("div").mouseover(function(){ 
    //here your stuff so simple.. 
}); 

Bạn có thể làm một cái gì đó như thế này

var flag = false; 
$("div").mouseover(function(){ 
    flag = true; 
    testing(); 
}); 
$("div").mouseout(function(){ 
    flag = false; 
    testing(); 
}); 

function testing(){ 
    if(flag){ 
     //mouse hover 
    }else{ 
     //mouse out 
    } 
} 
+1

Tôi muốn sử dụng nó trong một tuyên bố nếu không, như thế này. Nghĩ rằng tôi khá rõ ràng về điều đó. –

4

Vâng, đó là kinda của những sự kiện dành cho. Chỉ cần đính kèm trình xử lý sự kiện vào div bạn muốn theo dõi.

var div = document.getElementById('myDiv'); 
div.addEventListener('mouseenter', function(){ 
    // stuff to do when the mouse enters this div 
}, false); 

Nếu bạn muốn làm điều đó bằng toán học, bạn vẫn cần phải có một sự kiện vào một yếu tố phụ huynh hoặc một cái gì đó, để có thể có được các tọa độ chuột, sau đó sẽ được lưu trữ trong một đối tượng sự kiện, mà được chuyển đến cuộc gọi lại.

var body = document.getElementsByTagName('body'); 
var divRect = document.getElementById('myDiv').getBoundingClientRect(); 
body.addEventListener('mousemove', function(event){ 
    if (event.clientX >= divRect.left && event.clientX <= divRect.right && 
     event.clientY >= divRect.top && event.clientY <= divRect.bottom) { 
     // Mouse is inside element. 
    } 
}, false); 

Nhưng tốt nhất nên sử dụng phương pháp trên.

+0

địa ngục đẫm máu, 10 phút gỡ lỗi và chế nhạo, bạn đời! nó phải là 'event.clientY> = divRect.top' – scythargon

+0

lol, không, phần cuối sẽ giống như' event.clientY <= divRect.bottom' – scythargon

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