2009-03-12 7 views
5

से एचटीएमएल दस्तावेज़ के लिए कर्सर प्रकार बदलें मान लें कि मेरे पास जावास्क्रिप्ट विधि है जो बिना किसी उपयोगकर्ता प्रतिक्रिया के जाने के लिए थोड़ी देर तक ले जाती है। मेरे मामले में यह पंक्ति तत्व में पंक्तियों को क्रमबद्ध कर रहा है (सभी डोम में; केवल बहुत पंक्तियों में होने पर बहुत लंबा समय लगता है), लेकिन यह कुछ भी कर सकता है। मैं इसे चलाने के दौरान "प्रगति" कर्सर दिखाना चाहता हूं। यहां मेरे पास वर्तमान में है, लेकिन मैंने कई अन्य चीजों की भी कोशिश की है:जावास्क्रिप्ट

// SORT 
document.body.style.cursor = "progress"; 
MyLongRunningMethod(); //blocks for 10-15 seconds before returning 
document.body.style.cursor = "auto";  

दुर्भाग्यवश, कुछ भी नहीं होता है। MyLongRunningMethod() क्या यह सही बात है, लेकिन कर्सर कभी नहीं बदलता है। मेरा विचार यह है कि ब्राउज़र को विंडोिंग वातावरण द्वारा उत्पन्न कर्सर परिवर्तन संदेश को संभालने में सक्षम होने के लिए वापस आने के तरीके की प्रतीक्षा करने की आवश्यकता है, लेकिन यह संभव हो सकता है और यहां तक ​​कि यदि यह सच है तो मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

कोई अन्य विचार?


[संपादित करें]: मैंने तय किया कि मेरी पिछली कहानी वास्तव में आवश्यक नहीं थी। यदि आप वास्तव में इसे पढ़ना चाहते हैं तो संशोधन इतिहास की जांच करें।


अंतिम परिणाम

मैं RoBorg के समाधान का उपयोग कर समाप्त हो गया। यह कोड को गड़बड़ नहीं करता जितना मैं मूल रूप से सोच रहा था, क्योंकि मैं वहां फ़ंक्शन घोषित कर सकता हूं- यह एक इनलाइन स्कोप ब्लॉक जोड़ने जैसा है।

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

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

अंत में, क्रोम पूरी चीज को अप्रासंगिक बनाता है। उसी डेटा का उपयोग करके, क्रोम 5 सेकंड से भी कम समय में करता है जो आईई और फ़ायरफ़ॉक्स को 10 से 15 सेकंड तक पूरा करता है। तो उनका जावास्क्रिप्ट इंजन वास्तव में तेज़ है। मैं फ़ायरफ़ॉक्स 3.1 इंजन की प्रतीक्षा नहीं कर सकता। दुर्भाग्य से यहां लोग अभी भी ज्यादातर आईई 6 का उपयोग कर रहे हैं।

+0

सर्वर एसिंक्रोनस रूप से फोन SortTable करता है? – kristina

+0

नहीं, यह सब क्लाइंट पर डीओएम के साथ करता है। –

+0

दूसरे शब्दों में: यह पूरा होने तक ब्लॉक करता है। मैं इसे फायरबग में देख सकता हूं। –

उत्तर

9

प्रश्न से बाहर एक टाइमर का उपयोग कर रहा है?

document.body.style.cursor = "progress"; 

setTimeout(function() 
{ 
    SortTable(cell.cellIndex, dir, sortType); 
    document.body.style.cursor = "auto"; 
}, 10); 
+0

यह आदर्श की तुलना में कम है, निश्चित रूप से, लेकिन मैं कोई चारा :( –

+0

मैं इस मार्ग जा रहा समाप्त हो चुकी है, और यहाँ मैं क्या पाया। मैं कर्सर निर्धारित करने की आवश्यकता नहीं है। किसी भी तरह वहाँ में setTimeout() को जोड़ कर ब्राउज़र का पता लगा लेता यह कर्सर को अद्यतन करने पर यह own-- यह समारोह पता लगाने में सक्षम के सीपीयू का एक बहुत का उपयोग कर रहा है की जरूरत है –

+0

कोई बात नहीं:।। कि फ़ायरफ़ॉक्स था केवल IE कि स्मार्ट नहीं है और क्रोम काफी तेजी से यह नहीं है खत्म वैसे भी इसकी आवश्यकता है। –

0

document.body.style.cursor = "ऑटो" को दूर करने और यह एक समारोह अपने SortTable समारोह के पूरा होने पर कहा जाता है में रखने की कोशिश करें। इस तरह आप कार्य कर्सर पूरा होने तक व्यस्त कर्सर को बनाए रखेंगे। सुनिश्चित करें कि अगर आप SortTable() के भीतर एक त्रुटि स्थिति तक पहुंचते हैं जिसे आपने अभी भी "व्यस्त नहीं" फ़ंक्शन कॉल पर क्लिक किया है।

+0

मुझे लगता है कि आप गलत पढ़ा क्या हो रहा है। SortTable समारोह ब्लॉक। –

+0

हां। निश्चित रूप से याद किया है। मैं अब देखते हैं। और यहां तक ​​कि ऐसा लगता है कि इस सवाल का जवाब की तरह है "ऐसा मत करो" हालांकि, मैं वास्तव में आश्चर्य हो रहा है कि यहां क्या हो रहा है। ऐसा लगता है कि पृष्ठ स्क्रिप्ट लंबित होने पर शैली में किसी भी बदलाव को प्रदर्शित करने के लिए परेशान नहीं है (मैंने नीली पृष्ठभूमि में बदलने की कोशिश की)। – user64640

2

वेब में, माउस कर्सर बदलना पारंपरिक नहीं है और अच्छा नहीं है।

पृष्ठ पर कुछ छोटे एनिमेशन का उपयोग करने के लिए यह बहुत बेहतर (और आसान) है, ऐसी छवियों के लिए http://www.ajaxload.info/ देखें (यह एक ऑनलाइन जनरेटर है)।

+0

अच्छा लिंक: आपको एक अपवित्र मिलेगा बाद में इसके लिए ote लेकिन मैं इस समय वापस पकड़ रहा हूँ तो सवाल अनुत्तरित दृश्य पर थोड़ी देर तक रहता है। –

+0

मैं मानता हूं कि कर्सर बदलना AJAX अनुरोध के लिए खराब है। हालांकि, यह सब डीओएम में है और संभावित रूप से बहुत सारे सीपीयू समय का उपयोग कर सकते हैं। कर्सर को बदलना किसी भी एप्लिकेशन के साथ इंगित करने का पारंपरिक तरीका है। इसके अलावा: कर्सर प्रगति! = कर्सर प्रतीक्षा करें। –

+0

यह निर्भर करता है। इसे एक सूचक में बदलना अच्छा और पारंपरिक है। –