मैं यह पता लगाना चाहता हूं कि जब माउस खिड़की छोड़ता है तो मैं घटनाओं को फायरिंग से रोक सकता हूं जबकि उपयोगकर्ता का माउस कहीं और है।
यह कैसे करना है के कोई विचार?
मैं यह पता लगाना चाहता हूं कि जब माउस खिड़की छोड़ता है तो मैं घटनाओं को फायरिंग से रोक सकता हूं जबकि उपयोगकर्ता का माउस कहीं और है।
यह कैसे करना है के कोई विचार?
जवाबों:
किसी HTML पृष्ठ पर ड्रैग-ड्रॉप व्यवहार को लागू करते समय इस प्रकार का व्यवहार आम तौर पर वांछित होता है। नीचे दिए गए समाधान IE 8.0.6, फ़ायर्फ़ॉक्स 3.6.6, ओपेरा 10.53, और सफारी 4 का एमएस विंडोज एक्सपी मशीन पर परीक्षण किया गया था।
पीटर-पॉल कोच से पहला समारोह; पार ब्राउज़र घटना हैंडलर:
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
और फिर इस विधि का उपयोग एक ऑब्जेक्ट हैंडलर को दस्तावेज़ ऑब्जेक्ट्स माउसआउट ईवेंट में संलग्न करने के लिए करें:
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
// stop your drag event here
// for now we can just use an alert
alert("left window");
}
});
अंत में, यहाँ एक HTML पृष्ठ है जिसमें डिबगिंग के लिए लिपिबद्ध है:
<html>
<head>
<script type="text/javascript">
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
addEvent(window,"load",function(e) {
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
// stop your drag event here
// for now we can just use an alert
alert("left window");
}
});
});
</script>
</head>
<body></body>
</html>
यदि आप jQuery का उपयोग कर रहे हैं तो इस छोटे और मीठे कोड के बारे में कैसे -
$(document).mouseleave(function () {
console.log('out');
});
जब भी माउस आपके पृष्ठ में नहीं होगा, तब यह घटना शुरू हो जाएगी। बस जो आप चाहते हैं उसे करने के लिए फ़ंक्शन बदलें।
और आप भी इस्तेमाल कर सकते हैं:
$(document).mouseenter(function () {
console.log('in');
});
ट्रिगर करने के लिए जब माउस फिर से पृष्ठ पर वापस प्रवेश करता है।
यह मेरे लिए काम करता है:
addEvent(document, 'mouseout', function(evt) {
if (evt.toElement == null && evt.relatedTarget == null) {
alert("left window");
}
});
addEvent
?
if (!evt.toElement && !evt.relatedTarget)
स्क्रॉल पट्टी और स्वत: पूर्ण फ़ील्ड या निरीक्षण का ध्यान रखे बिना मूसलीव का पता लगाने के लिए:
document.addEventListener("mouseleave", function(event){
if(event.clientY <= 0 || event.clientX <= 0 || (event.clientX >= window.innerWidth || event.clientY >= window.innerHeight))
{
console.log("I'm out");
}
});
शर्तों की व्याख्या:
event.clientY <= 0 is when the mouse leave from the top
event.clientX <= 0 is when the mouse leave from the left
event.clientX >= window.innerWidth is when the mouse leave from the right
event.clientY >= window.innerHeight is when the mouse leave from the bottom
======================== EDIT ============================ ======
document.addEventListener ("mouseleave") को नए फ़ायरफ़ॉक्स संस्करण पर निकाल दिया जाना प्रतीत नहीं होता है, mouseleave को शरीर या एक बाल तत्व जैसे तत्व से जुड़ा होना चाहिए।
मैं इसके बजाय उपयोग करने का सुझाव देता हूं
document.body.addEventListener("mouseleave")
या
window.addEventListener("mouseout")
OnMouseLeave ईवेंट का उपयोग बुदबुदाहट को रोकता है और जब माउस ब्राउज़र विंडो को छोड़ता है, तो आप आसानी से पता लगा सकते हैं।
<html onmouseleave="alert('You left!')"></html>
document.onmouseleave = function() { alert('You left!') };
डॉक्युमेंट का उपयोग न करें। जो एरो को स्क्रॉल करता है जो बॉडी को सिकोड़ता है! तत्वों पर आग को रोकने के लिए कोड की आवश्यकता नहीं है। अच्छी व्याख्या: developer.mozilla.org/en-US/docs/Web/API/Element/…
इनमें से किसी भी जवाब ने मेरे लिए काम नहीं किया। अब मैं उपयोग कर रहा हूँ:
document.addEventListener('dragleave', function(e){
var top = e.pageY;
var right = document.body.clientWidth - e.pageX;
var bottom = document.body.clientHeight - e.pageY;
var left = e.pageX;
if(top < 10 || right < 20 || bottom < 10 || left < 10){
console.log('Mouse has moved out of window');
}
});
मैं इसका उपयोग ड्रैग एंड ड्रॉप फ़ाइल अपलोडिंग विजेट के लिए कर रहा हूँ। यह बिल्कुल सटीक नहीं है, जब माउस खिड़की के किनारे से एक निश्चित दूरी पर हो जाता है।
मैंने उपरोक्त सभी की कोशिश की है, लेकिन कुछ भी उम्मीद के मुताबिक काम नहीं करता है। थोड़ी खोजबीन के बाद मैंने पाया कि e.relatedTarget है एचटीएमएल बस से पहले माउस खिड़की बाहर निकालता है ।
तो ... मैं इसके साथ अंत कर रहा हूँ:
document.body.addEventListener('mouseout', function(e) {
if (e.relatedTarget === document.querySelector('html')) {
console.log('We\'re OUT !');
}
});
कृपया मुझे बताएं कि क्या आपको कोई समस्या या सुधार मिल रहा है!
2019 अपडेट
(user1084282 के रूप में पता चला)
document.body.addEventListener('mouseout', function(e) {
if (!e.relatedTarget && !e.toElement) {
console.log('We\'re OUT !');
}
});
relatedTarget
जब माउस खिड़की से बाहर निकल जाता है। @ User1084282 के उत्तर से प्रेरित होकर, इसे इसे बदलें: if(!e.relatedTarget && !e.toElement) { ... }
और यह काम करता है
if(!e.relatedTarget && !e.toElement)
वास्तविक उत्तर में शर्त के बजाय उपयोग करते हैं। यह पता लगाता है कि माउस दस्तावेज़ शरीर को छोड़ देता है।
मैंने जो कहा, उसे वापस लेता हूं। हो सकता है। मैंने यह कोड लिखा था, पूरी तरह से काम करता है।
window.onload = function() {
$span = document.getElementById('text');
window.onmouseout = function() {
$span.innerHTML = "mouse out";
}
window.onmousemove = function() {
$span.innerHTML = "mouse in";
}
}
क्रोम, फ़ायरफ़ॉक्स, ओपेरा में काम करता है। आईई में परीक्षण किया गया, लेकिन यह काम करता है मान।
संपादित करें। IE हमेशा परेशानी का कारण बनता है। IE में इसे काम करने के लिए, विंडो से दस्तावेज़ में घटनाओं को बदलें:
window.onload = function() {
$span = document.getElementById('text');
document.onmousemove = function() {
$span.innerHTML = "mouse move";
}
document.onmouseout = function() {
$span.innerHTML = "mouse out";
}
}
क्रॉसब्रोसर किक गधा कर्सर का पता लगाने के लिए उन्हें गठबंधन करें o0: P
इस सीएसएस को लागू करें:
html
{
height:100%;
}
यह सुनिश्चित करता है कि html तत्व विंडो की पूरी ऊंचाई लेता है।
इस jquery को लागू करें:
$("html").mouseleave(function(){
alert('mouse out');
});
माउसओवर और माउसआउट के साथ समस्या यह है कि यदि आप html से बाहर किसी बच्चे के तत्व पर माउस ले जाते हैं तो यह घटना को बंद कर देगा। मेरे द्वारा दिए गए फ़ंक्शन को चाइल्ड एलिमेंट में मूसिंग के दौरान सेट नहीं किया गया है। यह केवल तब सेट किया जाता है जब आप विंडो से बाहर / बाहर जाते हैं
बस आपको यह जानने के लिए कि आप यह तब कर सकते हैं जब उपयोगकर्ता विंडो में बैठते हैं:
$("html").mouseenter(function(){
alert('mouse enter');
});
मैंने एक के बाद एक कोशिश की और उस समय सबसे अच्छा जवाब मिला:
https://stackoverflow.com/a/3187524/985399
मैं पुराने ब्राउज़रों को छोड़ देता हूं इसलिए मैंने आधुनिक ब्राउज़रों पर काम करने के लिए कोड को छोटा कर दिया (IE9 +)
document.addEventListener("mouseout", function(e) {
let t = e.relatedTarget || e.toElement;
if (!t || t.nodeName == "HTML") {
console.log("left window");
}
});
document.write("<br><br>PROBLEM<br><br><div>Mouseout trigg on HTML elements</div>")
यहां आपको ब्राउज़र सपोर्ट दिखाई देता है
मुझे लगा कि यह बहुत कम है
लेकिन एक समस्या अभी भी बनी हुई है क्योंकि दस्तावेज़ में सभी तत्वों पर "माउसआउट" शुरू हो गया ।
इसे होने से रोकने के लिए, मूसलीव (IE5.5 +) का उपयोग करें । लिंक में अच्छी व्याख्या देखें।
निम्नलिखित कोड तत्व के अंदर तत्वों पर ट्रिगर किए बिना काम करता है अंदर या बाहर होने के लिए। दस्तावेज़ के बाहर भी खींचें-रिलीज़ करने का प्रयास करें।
var x = 0
document.addEventListener("mouseleave", function(e) { console.log(x++)
})
document.write("<br><br>SOLUTION<br><br><div>Mouseleave do not trigg on HTML elements</div>")
आप किसी भी HTML तत्व पर ईवेंट सेट कर सकते हैं। document.body
हालाँकि, इस पर ईवेंट नहीं है , क्योंकि माउस स्क्रॉलर को स्क्रॉल बार छोड़ने पर जब आप स्क्रॉल करना चाहते हैं, तो विंडो स्क्रॉलबार बॉडी और फायर को सिकोड़ सकता है, लेकिन इसके ऊपर माउसलेव इवेंट को ट्रिगर नहीं करना चाहता। document
उदाहरण के रूप में इसके बजाय इसे सेट करें ।
हो सकता है कि अगर आप लगातार बॉडी टैग में ऑनमॉउसओवर सुन रहे हैं, तो कॉलबैक तब करें जब ईवेंट समुद्र में न आ रहा हो, लेकिन, जैसा कि जैक कहता है, यह बहुत ही बदसूरत हो सकता है, क्योंकि सभी ब्राउज़र एक ही तरह से इवेंट को हैंडल नहीं करते हैं, कुछ और भी है संभावना है कि आप एक ही पृष्ठ में एक div पर होने से भी माउस खो देते हैं।
शायद इससे बाद में यहां आने वालों में से कुछ को मदद मिलेगी।
window.onblur
और document.mouseout
।
window.onblur
जब ट्रिगर किया जाता है:
Ctrl+Tab
या Cmd+Tab
।मूल रूप से किसी भी समय ब्राउज़र टैब फोकस खो देता है।
window.onblur = function(){
console.log("Focus Out!")
}
document.mouseout
जब ट्रिगर किया जाता है:
Ctrl+Tab
या Cmd+Tab
।मूल रूप से किसी भी मामले में जब आपका कर्सर दस्तावेज़ छोड़ देता है।
document.onmouseleave = function(){
console.log("Mouse Out!")
}
window.onblur
भी। +1
$(window).mouseleave(function() {
alert('mouse leave');
});
इसने मेरे लिए काम किया। यहाँ कुछ उत्तरों का संयोजन। और मैंने केवल एक बार एक मॉडल दिखाने वाला कोड शामिल किया। और मॉडल कहीं और क्लिक करने पर चला जाता है।
<script>
var leave = 0
//show modal when mouse off of page
$("html").mouseleave(function() {
//check for first time
if (leave < 1) {
modal.style.display = "block";
leave = leave + 1;
}
});
// Get the modal with id="id01"
var modal = document.getElementById('id01');
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
</script>
var demo = document.getElementById('demo');
document.addEventListener("mouseout", function(e){demo.innerHTML="😞";});
document.addEventListener("mouseover", function(e){demo.innerHTML="😊";});
div { font-size:80vmin; position:absolute;
left:50%; top:50%; transform:translate(-50%,-50%); }
<div id='demo'>😐</div>