पैक्स के समाधान के बारे में: यह काम नहीं करता है यदि उपयोगकर्ता जानबूझकर या गलती से एक से अधिक बटन क्लिक करता है। मुझे मत पूछो कि मैं कैसे जानता हूं :-(
सही कोड इस तरह होना चाहिए:
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 अद्यतन करें : मुझे नहीं पता कि मैंने कोड के डॉक्यूमेंट को क्यों बनाया है। इवेंट हैंडलर को सीधे दस्तावेज़ में संलग्न करना बेहतर होगा।