जावास्क्रिप्ट: जांचें कि क्या माउस बटन नीचे है?


136

क्या यह पता लगाने का कोई तरीका है कि माउस बटन वर्तमान में जावास्क्रिप्ट में है या नहीं?

मैं "मूसडाउन" घटना के बारे में जानता हूं, लेकिन यह वह नहीं है जो मुझे चाहिए। कुछ समय बाद माउस बटन दबाया जाता है, मैं यह पता लगाना चाहता हूं कि क्या यह अभी भी दबाया गया है।

क्या यह संभव है?


14
आप ऐसा उत्तर क्यों स्वीकार करते हैं जो आपके प्रश्न का उत्तर नहीं देता है। मूसडाउन और माउसअप को पंजीकृत करना गलत है (जैसा कि आप ब्राउज़र के बाहर माउसअप कर सकते हैं और यह सोच सकते हैं कि आप अभी भी खींच रहे हैं)। आपकी समस्या के बाद आना और इस पृष्ठ तक पहुँचना पूरी तरह से बेकार है
जैक

@ जेक यह मेरे सवाल का जवाब देता है। कृपया मेरा प्रश्न पढ़ें और फिर उत्तर पढ़ें। जाहिर तौर पर 100 से अधिक अन्य लोग इस बात से सहमत हैं कि यह एक अच्छा जवाब था।
टीएम।

4
हाँ .. लेकिन मुझे, अल्फ्रेड, और अन्य 8 आपको बता रहे हैं कि माउसअप और मूसडाउन को ट्रैक करना सही तरीका नहीं है। सही उत्तर में आपकी पसंद के हैंडलर में ईवेंट ऑब्जेक्ट का विश्लेषण शामिल होना चाहिए, या सभी माउस संबंधित घटनाओं (जैसे प्रवेश / निकास) का विश्लेषण करना चाहिए, यदि आपको इवेंट-संचालित चेक के बजाय समय-चालित चेक की आवश्यकता है।
जैक

यह सवाल 7 साल पहले पूछा गया था और जवाब दिया गया था। नए उत्तर होने पर मुझे कोई सूचना नहीं मिलती (लेकिन मैं टिप्पणियों के लिए आता हूं)। एक बेहतर उत्तर लिखें और समुदाय इसे शीर्ष तक बढ़ा देगा :) बहुत सारी जानकारी बासी हो जाती है और चीजें बदल जाती हैं।
टीएम।

2
@TM। Necro के लिए क्षमा करें, लेकिन ... नहीं, वह जानकारी कभी भी शीर्ष पर नहीं जाएगी। एक गैर-सेल्फी, जिसे एक बार स्वीकार कर लिया जाता है, हमेशा के लिए शीर्ष पर रहता है। इसके अलावा, "ओह इतने सारे लोगों ने इस एक के लिए वोट दिया" इसका मतलब यह नहीं है कि उत्तर एक अच्छा है; इसका मतलब है कि बहुत से लोगों ने इसे देखा, सोचा कि यह ठीक लग रहा है, और ऊपर की ओर मारा क्योंकि यह उनके लिए काम करने लगा।
निधि मोनिका का मुकदमा

जवाबों:


147

पैक्स के समाधान के बारे में: यह काम नहीं करता है यदि उपयोगकर्ता जानबूझकर या गलती से एक से अधिक बटन क्लिक करता है। मुझे मत पूछो कि मैं कैसे जानता हूं :-(

सही कोड इस तरह होना चाहिए:

var mouseDown = 0;
document.body.onmousedown = function() { 
  ++mouseDown;
}
document.body.onmouseup = function() {
  --mouseDown;
}

इस तरह परीक्षण के साथ:

if(mouseDown){
  // crikey! isn't she a beauty?
}

यदि आप यह जानना चाहते हैं कि कौन सा बटन दबाया गया है, तो माउसडाउन को काउंटरों की एक सरणी बनाने के लिए तैयार रहें और उन्हें अलग-अलग बटन के लिए अलग-अलग गिनें:

// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
    mouseDownCount = 0;
document.body.onmousedown = function(evt) { 
  ++mouseDown[evt.button];
  ++mouseDownCount;
}
document.body.onmouseup = function(evt) {
  --mouseDown[evt.button];
  --mouseDownCount;
}

अब आप देख सकते हैं कि कौन से बटन बिल्कुल दबाए गए थे:

if(mouseDownCount){
  // alright, let's lift the little bugger up!
  for(var i = 0; i < mouseDown.length; ++i){
    if(mouseDown[i]){
      // we found it right there!
    }
  }
}

अब चेतावनी दी गई है कि ऊपर दिया गया कोड केवल मानक-अनुपालन वाले ब्राउज़रों के लिए काम करेगा, जो आपको 0 और ऊपर से शुरू होने वाले एक बटन नंबर से गुजरते हैं। IE वर्तमान में दबाए गए बटन का एक सा मुखौटा का उपयोग करता है:

  • "कुछ भी नहीं दबाया जाता है" के लिए
  • 1 बाईं ओर
  • अधिकार के लिए २
  • मध्य के लिए 4
  • और ऊपर के किसी भी संयोजन, उदाहरण के लिए, बाएँ + मध्य के लिए 5

इसलिए अपने अनुसार अपने कोड को समायोजित करें! मैं इसे एक अभ्यास के रूप में छोड़ता हूं।

और याद रखें: IE "इवेंट" नामक एक वैश्विक ईवेंट ऑब्जेक्ट का उपयोग करता है।

संयोग से IE आपके मामले में एक उपयोगी सुविधा है: जब अन्य ब्राउज़र केवल माउस बटन इवेंट्स के लिए "बटन" भेजते हैं (onclick, onmousedown, और onmouseup), IE इसे onmousemove के साथ भी भेजता है। इसलिए जब आप बटन स्थिति को जानना चाहते हैं, तो आप ओनमूसमेव के लिए सुनना शुरू कर सकते हैं, और जैसे ही आप इसे प्राप्त करते हैं, evt.button के लिए जाँच करें - अब आप जानते हैं कि माउस बटन क्या दबाया गया था:

// for IE only!
document.body.onmousemove = function(){
  if(event.button){
    // aha! we caught a feisty little sheila!
  }
};

निश्चित रूप से आपको कुछ नहीं मिलता अगर वह मृत खेलती है और चलती नहीं है।

प्रासंगिक लिंक:

# 1 अद्यतन करें : मुझे नहीं पता कि मैंने कोड के डॉक्यूमेंट को क्यों बनाया है। इवेंट हैंडलर को सीधे दस्तावेज़ में संलग्न करना बेहतर होगा।


1
परीक्षण के बाद, यह प्रतीत होता है कि evt.button वास्तव में IE7 के साथ onmousemove मौजूद नहीं है ...
TM।

5
मुझे लगता है कि यह क्रोम में काम नहीं करेगा, क्योंकि मूल मूसडाउन एक स्क्रॉलबार पर होने पर क्रोम माउसअप घटनाओं को उत्पन्न नहीं करता है। एक उदाहरण , इस क्रोम / क्रोमियम मुद्दे से । तो आपका बायाँ माउस बटन हमेशा के लिए डाउन हो जाएगा, अगर कोई स्क्रॉलबार है जिसका कोई उपयोग करता है! (क्रोम में)
काजमग्नस

1
मुझे आपके समाधान से प्यार है, लेकिन क्या होगा अगर माउस एक अलग एप्लिकेशन से आ रहा है, एमएस वर्ड और इसके कुछ पाठ को खींच रहा है। आप कैसे पता लगाएंगे कि माउस नीचे है?
Shadrack B. ओरिना

6
मुझे समझ में नहीं आ रहा है कि आप दूसरे उदाहरण में मूसडाउन एरे एल्ट्स क्यों बढ़ा रहे हैं। प्रत्येक बटन के लिए बूल के बजाय प्रत्येक बटन के लिए एक काउंटर क्यों?
amwinter

2
यह वास्तव में लोकप्रिय प्रश्न (और उत्तर) है। मुझे आश्चर्य है कि यह अभी तक सामने नहीं आया है, लेकिन आपको माउस डेटा को स्टोर करने की आवश्यकता नहीं है। आप केवल event.buttonsबाहरी सहेजे गए चर के बिना, जो भी घटना ट्रिगर का उपयोग कर रहे हैं उसमें प्लग कर सकते हैं। मैंने एक बिल्कुल नया सवाल पूछा (क्योंकि मेरा माउसअप इवेंट हमेशा फायर नहीं करता है, इसलिए यह समाधान मेरे लिए काम नहीं करता है) और शायद 5 मिनट में सबसे ऊपर है।
RoboticRenaissance

32

यह एक पुराना प्रश्न है, और यहां उत्तर अधिकतर उपयोग करने mousedownऔर mouseupएक बटन दबाए जाने के बारे में जानकारी रखने के लिए अधिवक्ता लगते हैं । लेकिन जैसा कि दूसरों ने बताया है, mouseupकेवल ब्राउज़र के भीतर प्रदर्शन करने पर आग लग जाएगी, जिससे बटन स्थिति का ट्रैक खो सकता है।

हालाँकि, माउसइवेंट (अब) इंगित करता है कि वर्तमान में कौन से बटन पुश किए गए हैं:

  • सभी आधुनिक ब्राउज़रों के लिए (सफारी को छोड़कर) उपयोग करें MouseEvent.buttons
  • सफारी के लिए, उपयोग MouseEvent.which( buttonsसफारी के लिए अपरिभाषित होगा) नोट: राइट और मिडिल क्लिक के लिए whichविभिन्न नंबरों का उपयोग buttonsकरता है।

जब पंजीकृत किया जाता है, तो जैसे ही ब्राउज़र ब्राउज़र को फिर से दिखाई देगा document, mousemoveतुरंत आग लग जाएगी, इसलिए यदि उपयोगकर्ता बाहर जारी करता है, तो जैसे ही वे वापस अंदर जाएंगे, राज्य को अपडेट कर दिया जाएगा।

एक साधारण कार्यान्वयन जैसा दिख सकता है:

var leftMouseButtonOnlyDown = false;

function setLeftButtonState(e) {
  leftMouseButtonOnlyDown = e.buttons === undefined 
    ? e.which === 1 
    : e.buttons === 1;
}

document.body.onmousedown = setLeftButtonState;
document.body.onmousemove = setLeftButtonState;
document.body.onmouseup = setLeftButtonState;

यदि अधिक जटिल परिदृश्यों की आवश्यकता होती है (विभिन्न बटन / एकाधिक बटन / नियंत्रण कुंजी), तो माउसवेट डॉक्स देखें। जब / यदि सफारी अपने खेल को बढ़ाता है, तो यह आसान होना चाहिए।


6
यह कोड जांचता है कि क्या केवल प्राथमिक बटन दबाया गया है और अन्य सभी बटन को अनप्रेस्ड करने की आवश्यकता है। (उदाहरण के लिए, यदि प्राथमिक और द्वितीयक दोनों को दबाया जाता e.buttonsहै 1+2=3, तो e.buttons === 1यह गलत होगा)। यदि आप जांचना चाहते हैं कि प्राथमिक बटन नीचे है, लेकिन किसी अन्य बटन स्थिति की परवाह नहीं करते हैं, तो यह करें:(e.buttons & 1) === 1
AJ रिचर्डसन

मेरे पास एक ऐसी स्थिति है जहां मुझे उम्मीद है कि एक मूसमव के दौरान मुझे बटन कोड '1' होना चाहिए, लेकिन यह '7' का उत्पादन करता है, - सभी काम क्रोम पर है। किसी के पास कोई आइडिया है?
वसिली हॉल

@VasilyHall के लिए MDN डॉक्स को देखते हुए MouseEvent.buttons, ऐसा लगता है कि 7इसका मतलब है कि यह लगता है कि प्राथमिक, माध्यमिक और सहायक बटन सभी को एक साथ दबाया जा रहा है। मुझे यकीन नहीं है कि ऐसा क्यों होगा - क्या आप एक उन्नत माउस का उपयोग कर रहे हैं? यदि हां, तो शायद यह एक मूल के साथ प्रयास करने के लायक है। यदि आपको बस इसे प्राप्त करने की आवश्यकता है, तो आप यह सुनिश्चित करने के लिए एक बिटवाइज़ चेक का उपयोग कर सकते हैं कि बाएं बटन दबाया गया है और किसी अन्य को अनदेखा कर रहा है। जैसे। MouseEvent.buttons & 1 === 1
जोनो जॉब

धन्यवाद, मैं एक विशेष ब्राउज़र के अंदर अपने जावास्क्रिप्ट का उपयोग कर रहा था: एडोब इलस्ट्रेटर एप्लिकेशन के भीतर एम्बेडेड क्रोम (ium?) - मैं किसी भी तरह से सभी विभिन्न चीजों के संयोजन पर शर्त लगाता हूं 7 की ओर जाता है, हालांकि सिर्फ एक बटन दबाया जा रहा है । यह देखते हुए कि यह मेरे आवेदन के भीतर कैसे है, मैं अपनी अन्तरक्रियाशीलता को सुविधाजनक बनाने के लिए केवल 1 या 7 की जाँच कर रहा हूँ। मैं जोड़ूंगा, हालांकि मैं लॉजिटेक M570 (या जो भी) ट्रैकबॉल माउस का उपयोग करता हूं, वह नियमित ब्राउज़र में 1 को सही ढंग से पंजीकृत करता है, लेकिन 7 इलस्ट्रेटर के अंदर।
वसीली हॉल

16

मुझे लगता है कि इसके लिए सबसे अच्छा तरीका माउस बटन स्थिति का अपना रिकॉर्ड रखना है, इस प्रकार है:

var mouseDown = 0;
document.body.onmousedown = function() { 
    mouseDown = 1;
}
document.body.onmouseup = function() {
    mouseDown = 0;
}

और फिर, बाद में आपके कोड में:

if (mouseDown == 1) {
    // the mouse is down, do what you have to do.
}

+1, और धन्यवाद। मैंने सोचा कि मुझे इसका सहारा लेना पड़ सकता है, लेकिन मैं उम्मीद कर रहा था कि कुछ सुविधा है जो आपको सीधे राज्य की जांच करने दें।
टीएम।

12
क्या बूलियन का उपयोग नहीं करने का एक कारण है?
मूला

1
@ मुझे लगता है कि इंट कम टाइपिंग करता है, और अंततः थोड़ा बेहतर प्रदर्शन होता है: jsperf.com/bool-vs-int
एल्मोर

12

समाधान अच्छा नहीं है। कोई दस्तावेज़ पर "मूसडाउन" कर सकता है, फिर ब्राउज़र के बाहर "माउसअप" और इस मामले पर ब्राउज़र अभी भी सोच रहा होगा कि माउस नीचे है।

एकमात्र अच्छा समाधान IE.event ऑब्जेक्ट का उपयोग कर रहा है।


11
मैं देख रहा हूं कि आप कहां से आ रहे हैं, लेकिन एक समाधान जो केवल IE के लिए काम करता है, वह एक अच्छा समाधान नहीं है।
टीएम।

@ अल्फ्रेड किसी मामले में यह जानने में मदद कर सकते हैं कि क्या मूसमोव खिड़की से बाहर है। अगर (event.target.nodeName.toLowerCase === "html ') = 0 नीचे;
BF

6

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे लगा कि माउस अप / डाउन का उपयोग करके माउस बटन को ट्रैक करना थोड़ा क्लिंक लगता है, इसलिए मुझे एक विकल्प मिला जो कुछ को अपील कर सकता है।

<style>
    div.myDiv:active {
        cursor: default;
    }
</style>

<script>
    function handleMove( div ) {
        var style = getComputedStyle( div );
        if (style.getPropertyValue('cursor') == 'default')
        {
            // You're down and moving here!
        }
    }
</script>

<div class='myDiv' onmousemove='handleMove(this);'>Click and drag me!</div>

: सक्रिय चयनकर्ता माउस को माउस अप / डाउन की तुलना में बहुत बेहतर क्लिक करता है, आपको बस ओनमूसमेव इवेंट में उस स्थिति को पढ़ने का एक तरीका चाहिए। इसके लिए मुझे धोखा देने और इस तथ्य पर भरोसा करने की आवश्यकता है कि डिफ़ॉल्ट कर्सर "ऑटो" है और मैं इसे "डिफ़ॉल्ट" में बदल देता हूं, जो कि डिफ़ॉल्ट रूप से ऑटो का चयन करता है।

आप getComputedStyle द्वारा लौटाए गए ऑब्जेक्ट में कुछ भी उपयोग कर सकते हैं जिसे आप अपने पृष्ठ जैसे बॉर्डर-कलर के रूप को परेशान किए बिना एक ध्वज के रूप में उपयोग कर सकते हैं।

मुझे अपना खुद का उपयोगकर्ता परिभाषित शैली: सक्रिय अनुभाग में सेट करना पसंद होगा, लेकिन मुझे वह काम नहीं मिला। यह संभव है तो बेहतर होगा।


इसे साझा करने के लिए धन्यवाद। मैं ड्रैग-एन-ड्रॉप स्टाइलिंग लॉजिक के लिए इस विचार का उपयोग कर रहा था, लेकिन IE पर एक समस्या का सामना करना पड़ा और अतिरिक्त तर्क
आईयूपी युसिन

4

निम्नलिखित स्निपेट "doStuff" फंक्शन को 2 सेकंड में निष्पादित करने का प्रयास करेगा, जब माउसडाउन इवेंट document.body में होता है। यदि उपयोगकर्ता बटन उठाता है, तो माउसअप ईवेंट घटित होगा और विलंबित निष्पादन को रद्द करेगा।

मैं क्रॉस-ब्राउज़र इवेंट अटैचमेंट के लिए कुछ विधि का उपयोग करने की सलाह दूंगा - उदाहरण को सरल बनाने के लिए मूसडाउन और माउसअप गुण सेट करना।

function doStuff() {
  // does something when mouse is down in body for longer than 2 seconds
}

var mousedownTimeout;

document.body.onmousedown = function() { 
  mousedownTimeout = window.setTimeout(doStuff, 2000);
}

document.body.onmouseup = function() {
  window.clearTimeout(mousedownTimeout);
}

धन्यवाद, लेकिन यह वह व्यवहार नहीं है जिसकी मैं तलाश कर रहा था (हालांकि मैं देख सकता हूं कि मेरा प्रश्न यह दर्शाता है कि यह वही है जो मैं करने की कोशिश कर रहा हूं)।
टीएम।

3

छोटा एवं सुन्दर

मुझे यकीन नहीं है कि पिछले उत्तरों में से किसी ने भी मेरे लिए काम क्यों नहीं किया, लेकिन मैं यूरेका पल के दौरान इस समाधान के साथ आया। यह न केवल काम करता है, बल्कि यह सबसे सुरुचिपूर्ण भी है:

बॉडी टैग में जोड़ें:

onmouseup="down=0;" onmousedown="down=1;"

तब परीक्षण और निष्पादित myfunction()अगर downबराबर होता है 1:

onmousemove="if (down==1) myfunction();"

4
आप नए हैं, इसलिए मैं यहां आपकी थोड़ी मदद करने जा रहा हूं। सबसे पहले, अपने पदों में अपने व्याकरण को ध्यान में रखें - मैंने संभवतः इसे लगाने में जितना समय लगाया है, उससे अधिक समय बिताया है। दूसरा, आपका समाधान ऊपर सूचीबद्ध अन्य लोगों का सिर्फ एक और संस्करण है - यह कोई नई बात नहीं है। तीसरा, आपका समाधान "झंडे का उपयोग करना" के रूप में संदर्भित एक तकनीक का उपयोग करता है, जिसे थॉमस हैनसन ने ऊपर सुझाया था। कृपया ध्यान रखें कि आपके व्याकरण की जांच करने के लिए और पुराने समाधानों को पोस्ट करते समय समाधानों को न दोहराएं, इस बारे में कुछ स्पष्टीकरण दिए बिना कि अन्य समाधान आपके लिए काम क्यों नहीं करते हैं।
Zachary Kniebel

5
हालांकि, मैंने आपके समाधान को वोट दिया, क्योंकि यह मान्य है और आप एसओ के लिए नए हैं
Zachary Kniebel

2

आप @Pax और मेरे उत्तरों को जोड़ सकते हैं ताकि माउस उस अवधि को प्राप्त कर सके जो इसके लिए नीचे है:

var mousedownTimeout,
    mousedown = 0;

document.body.onmousedown = function() {
  mousedown = 0; 
  window.clearInterval(mousedownTimeout);
  mousedownTimeout = window.setInterval(function() { mousedown += 200 }, 200);
}

document.body.onmouseup = function() {
  mousedown = 0;
  window.clearInterval(mousedownTimeout);
}

फिर बाद में:

if (mousedown >= 2000) {
  // do something if the mousebutton has been down for at least 2 seconds
}

यह एक बुरा विचार नहीं है, जेक। क्या आपको mousedown को 0 पर सेट करने से पहले onmouseup () में ClearInterval () करने की आवश्यकता है? मैं टाइमर फ़ंक्शन को 0 से सेट करने और टाइमर को रोकने के बीच फायरिंग से सावधान हूं, 200 पर टाइमआउट छोड़ रहा हूं? इसी तरह ओनमूसडाउन में।
paxdiablo

ClearIntervals का क्रम कोई फर्क नहीं पड़ने वाला है क्योंकि निष्पादन का वर्तमान धागा किसी भी घटना (टाइमर सहित) से पहले समाप्त हो जाएगा।
नाथनियल रेनहार्ट 1

2

आपको माउसडाउन और माउसअप को संभालने और कुछ झंडा या कुछ सेट करने के लिए इसे ट्रैक करने की आवश्यकता है "बाद में नीचे सड़क" ... ...


2

यदि आप मौजूदा माउस ईवेंट हैंडलर्स के साथ एक जटिल पृष्ठ के भीतर काम कर रहे हैं, तो मैं ईवेंट को कैप्चर (बबल के बजाय) पर संभालने की सलाह दूंगा । ऐसा करने के लिए, बस के 3 पैरामीटर सेट addEventListenerकरने के लिए true

इसके अतिरिक्त, आप event.whichयह सुनिश्चित करने के लिए जांच कर सकते हैं कि आप वास्तविक उपयोगकर्ता सहभागिता को संभाल रहे हैं और न कि माउस ईवेंट elem.dispatchEvent(new Event('mousedown'))

var isMouseDown = false;

document.addEventListener('mousedown', function(event) { 
    if ( event.which ) isMouseDown = true;
}, true);

document.addEventListener('mouseup', function(event) { 
    if ( event.which ) isMouseDown = false;
}, true);

दस्तावेज़ के बजाय हैंडलर को दस्तावेज़ (या विंडो) में जोड़ें। कोई भी महत्वपूर्ण है b / c यह सुनिश्चित करता है कि विंडो के बाहर माउसअप घटनाएँ अभी भी रिकॉर्ड किया गया है।


1

यदि कोई हो, तो दबाए गए बटन को जांचने के लिए माउसइवेंट एप का उपयोग करना :

document.addEventListener('mousedown', (e) => console.log(e.buttons))

वापसी :

एक या एक से अधिक बटन का प्रतिनिधित्व करने वाला नंबर। एक से अधिक बटन एक साथ दबाने पर, मान संयुक्त होते हैं (जैसे, 3 प्राथमिक + द्वितीयक)।

0 : No button or un-initialized
1 : Primary button (usually the left button)
2 : Secondary button (usually the right button)
4 : Auxilary button (usually the mouse wheel button or middle button)
8 : 4th button (typically the "Browser Back" button)
16 : 5th button (typically the "Browser Forward" button)

0

JQuery का उपयोग करते हुए, निम्न समाधान "पृष्ठ को फिर से जारी करने के मामले को खींचें" को भी संभालता है।

$(document).mousedown(function(e) {
    mouseDown = true;
}).mouseup(function(e) {
    mouseDown = false;
}).mouseleave(function(e) {
    mouseDown = false;
});

मुझे नहीं पता कि यह कई माउस बटन कैसे संभालता है। यदि विंडो के बाहर क्लिक शुरू करने का कोई तरीका होता, तो माउस को विंडो में लाते, तो यह शायद वहां भी ठीक से काम नहीं करता।


0

JQuery के उदाहरण के नीचे, जब माउस $ ('तत्व') से अधिक है, तो रंग बदल रहा है, जिसके आधार पर माउस बटन दबाया जाता है।

var clicableArea = {
    init: function () {
        var self = this;
        ('.element').mouseover(function (e) {
            self.handlemouseClick(e, $(this));
        }).mousedown(function (e) {
            self.handlemouseClick(e, $(this));
        });
    },
    handlemouseClick: function (e, element) {
        if (e.buttons === 1) {//left button
            element.css('background', '#f00');
        }
        if (e.buttons === 2) { //right buttom
            element.css('background', 'none');
        }
    }
};
$(document).ready(function () {
    clicableArea.init();
});

0

जैसा कि @ जेक ने कहा, जब mouseupब्राउज़र विंडो के बाहर होता है, तो हम इसके बारे में नहीं जानते हैं ...

इस कोड (लगभग) ने मेरे लिए काम किया:

window.addEventListener('mouseup', mouseUpHandler, false);
window.addEventListener('mousedown', mouseDownHandler, false);

दुर्भाग्य से, मुझे mouseupउन मामलों में से एक में घटना नहीं मिलेगी :

  • उपयोगकर्ता एक साथ एक कीबोर्ड कुंजी और एक माउस बटन दबाता है, ब्राउज़र विंडो के बाहर माउस बटन जारी करता है फिर कुंजी जारी करता है।
  • उपयोगकर्ता दो माउस बटन एक साथ दबाता है , एक माउस बटन जारी करता है और फिर दूसरा, ब्राउज़र विंडो के बाहर।

-1

ठीक है, आप देख नहीं सकते कि यह घटना के बाद नीचे है, लेकिन आप जाँच सकते हैं कि क्या यह ऊपर है ... यदि यह ऊपर है .. इसका मतलब है कि अब नीचे नहीं है: पी लोल

तो उपयोगकर्ता बटन को दबाता है (ऑनमाउन्डडाउन इवेंट) ... और उसके बाद, आप चेक करते हैं कि क्या चालू है (ऑनमाउन्सडाउन)। जबकि यह नहीं है, आप वह कर सकते हैं जो आपको चाहिए।


2
OnMouseUp एक घटना भी नहीं है? आप "संपत्ति" की जांच कैसे करेंगे? या किसकी संपत्ति, बल्कि?
रोहित

@ रोहित: आप संपत्ति की जांच नहीं करते हैं, आप एक झंडे का प्रबंधन करते हैं जो यह दर्शाता है कि घटना हुई है ... माउस बटन या तो ऊपर या नीचे है।
फीलो

-1
        var mousedown = 0;
        $(function(){
            document.onmousedown = function(e){
                mousedown = mousedown | getWindowStyleButton(e);
                e = e || window.event;
                console.log("Button: " + e.button + " Which: " + e.which + " MouseDown: " + mousedown);
            }

            document.onmouseup = function(e){
                mousedown = mousedown ^ getWindowStyleButton(e);
                e = e || window.event;
                console.log("Button: " + e.button + " Which: " + e.which + " MouseDown: " + mousedown);
            }

            document.oncontextmenu = function(e){
                // to suppress oncontextmenu because it blocks
                // a mouseup when two buttons are pressed and 
                // the right-mouse button is released before
                // the other button.
                return false;
            }
        });

        function getWindowStyleButton(e){
            var button = 0;
                if (e) {
                    if (e.button === 0) button = 1;
                    else if (e.button === 1) button = 4;
                    else if (e.button === 2) button = 2;  
                }else if (window.event){
                    button = window.event.button;
                }
            return button;
        }

यह क्रॉस-ब्राउज़र संस्करण मेरे लिए ठीक काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.