2010-11-01 4 views
8

मेरे पास मेरी वेबसाइट पर एक तत्व है जो स्वतंत्र रूप से आकार बदलने योग्य है। यह किनारों पर 4 हैंडल द्वारा किया जाता है। इन हैंडल को घुमाने पर और तत्व का आकार बदलते समय मैं संबंधित आकार बदलने वाले तीरों को दिखाना चाहता हूं।ब्राउज़र कर्सर के बाहर कस्टम कर्सर

वर्तमान में मैंने इन तीरों के लिए शरीर/रूट की सीएसएस कर्सर शैली सेट करके इस व्यवहार को लागू किया। इसके बारे में समस्या ब्राउज़र विंडो के क्लाइंट क्षेत्र की सीमा है। यह दृश्यमान रूप से अधिक संगत और कम भ्रमित होगा, यदि माउस दबाए जाने पर तीर कर्सर हर जगह दिखाई देगा।

Google मानचित्र मानचित्र को स्थानांतरित करते समय अपने हाथ कर्सर के साथ एक ही काम कर रहा है। तो मेरा सवाल यह है कि इस प्रभाव को अपने आप कैसे प्राप्त करें।

मेरे वर्तमान (प्रासंगिक) स्रोत:

function startObjectScaling(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    document.documentElement.style.cursor = this.style.cursor; 
    window.addEventListener("mouseup", stopObjectScaling, false); 
} 

function stopObjectScaling(e){ 
    e.stopPropagation(); 
    document.documentElement.style.cursor = ''; 
    window.removeEventListener("mouseup", stopObjectScaling); 
} 

[...] 

var tg = document.getElementById("transformGadget"); 
var handle = tg.firstChild.nextSibling; 
for(var i=0;i<4;i++){ 
    handle.addEventListener("mousedown", startObjectScaling, false); 
    handle = handle.nextSibling; 
} 
+0

क्या कोड/मार्कअप आप वर्तमान में क्या है? – alex

+2

क्रोमियम पर मेरे लिए, Google मानचित्र कर्सर केवल एक हाथ रखता है अगर मैं पृष्ठ के किसी अन्य भाग पर बिना खिड़की से बाहर जाता हूं; अन्यथा, यह सामान्य कर्सर पर वापस आ जाता है। मुझे लगता है कि इसका मतलब यह है कि दुर्भाग्यवश, आपको शायद आपकी समस्या का 100% समाधान नहीं मिल सकता है। –

+0

मैंने फ़ायरफ़ॉक्स और क्रोम में इसका परीक्षण किया और वहां यह ठीक काम करता है - यह मेरे वर्तमान समाधान से इतना बेहतर या बेहतर है। – V02460

उत्तर

4

इस उद्देश्य के लिए अधिक आधुनिक ब्राउज़र में एक विशेष कार्य लागू किया गया है। नाम setCapture() है। यह उस ऑब्जेक्ट पर सभी माउस इनपुट को रीडायरेक्ट करता है जिस पर विधि को कॉल किया गया था। अब एक साधारण सीएसएस कर्सर उस तत्व की परिभाषा वांछित प्रभाव संग्रहित करने के लिए पर्याप्त है। माउस रिलीज के बाद यह प्रभाव बंद हो जाता है (निश्चित रूप से सुरक्षा के लिए)। यह भी फोन करके मैन्युअल रूप से रोका जा सकता है releaseCapture

उदाहरण:

<style type="text/css"> 
#testObj { 
    /* this cursor will also stay outside the window. 
     could be set by the script at the mousedown event as well */ 
    cursor: hand; 
} 
</style> 

[...]

document.getElementById('testObj').onmousedown = function(e){ 

    // these 2 might be useful in this context as well 
    //e.stopPropagation(); 
    //e.preventDefault(); 

    // here is the magic 
    e.target.setCapture(); 
} 
+0

मुझे खुशी है कि आपको समस्या का उत्तर मिला है। पेज को अपडेट करने के लिए धन्यवाद। 1 99 5 से – jcolebrand

+0

आईई एफटीडब्ल्यू! –

-1

अगर तीर कर्सर हर जगह दिखाई दे रहा होगा जबकि माउस दबाए रखें है।

आप अपना व्यवहार बनाने के लिए एक संभावित ओएस क्विर्क पर भरोसा कर रहे हैं। यह ऐसा कुछ नहीं है जिसे आप स्वीकार कर सकते हैं। हालांकि, एक बार जब आप एक मूसडाउन शुरू करते हैं, तो उस बिंदु पर कर्सर सामान्य रूप से वही रहेगा, इससे कोई फर्क नहीं पड़ता कि आप माउस को कहाँ ले जाते हैं, कुछ और (एक और विंडो जिसे आप माउस पर ले जा सकते हैं? डेस्कटॉप? सिस्टम-इंटरप्ट?) परिवर्तन कर्सर

दूसरे शब्दों में, इस व्यवहार पर भरोसा न करें। कुछ और ढूंढें जो आपके लिए काम करेगा। यदि आपको ऐसा करना है, तो अपनी व्यावसायिक आवश्यकताओं की पुन: जांच करें।

+2

यह एक जंगली अनुमान है और मुझे त्वरित खोज के साथ इसके बारे में कोई जानकारी नहीं मिली, लेकिन मुझे लगता है कि यह एक ओएस क्विर्क नहीं है, बल्कि इसके बजाय एक ब्राउज़र ब्राउज़र विक्रेताओं (हाँ, यह उन सभी के द्वारा संगत है) लागू किया गया है - यदि आप बाईं माउस को दबाए रखते हैं तो माउस क्षेत्र के बाहर माउस समन्वित अद्यतन की तरह, लेकिन सही नहीं । उन्होंने इसे ठीक तरह से काम करने के लिए उन प्रकार के अनुप्रयोगों के लिए किया था। – V02460

+0

मैं अभी भी कर्सर ड्राइंग के कारण ओएस क्विर्क होने के कारण खड़ा हूं जीडीआई या डब्ल्यूएम द्वारा प्रबंधित किया जाना चाहिए। यदि मैं एक कताई ताला के साथ एक खिड़की पर माउस मैं स्पिनर मिलता है। मैंने जानबूझकर किसी भी सिस्टम पर इसका परीक्षण करने की कोशिश नहीं की है, इसलिए यदि आप एक वर्किंग टेस्टबेड बनाते हैं जिसमें जीनोम, केडीई, विंडोज, मैकोज़ और क्रोम, फ़ायरफ़ॉक्स, सफारी और आईई शामिल हैं, तो प्रत्येक एप्लिकेशन में कर्सर परिवर्तन और ड्रैग-आउट-ऑफ- सीमा-साथ-कर्सर-परिवर्तन और ड्रैग-आउट-ऑफ-बाउंड-बिना-कर्सर-परिवर्तन कृपया सुनिश्चित करें और मुझे बताएं। तब तक, मैं अपनी समझ के साथ जा रहा हूँ। – jcolebrand

+0

इसके अलावा मैं यह इंगित करने जा रहा हूं कि यदि यह उन सभी के अनुरूप है, तो आप शायद गलत हैं। ब्राउज़र विक्रेताओं को 100% सुसंगत तत्व अंतर भी नहीं मिल सकता है। आप उन्हें माउस व्यवहार लगातार प्राप्त करने की उम्मीद करते हैं? – jcolebrand