簡體   English   中英

從javascript更改html文檔的光標類型

[英]Change cursor type for an html document from javascript

假設我有一個javascript方法需要花費很長時間才能完成,而根本沒有任何用戶反饋。 在我的情況下,它是對表元素中的行進行排序(所有在DOM中;如果有很多行,則只需要太長時間),但它可能會做任何事情。 我想在運行時顯示“進度”光標。 這是我目前所擁有的,但我也嘗試了其他幾個方面:

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

不幸的是,沒有任何事 MyLongRunningMethod()正確地做到了,但光標永遠不會改變。 我的想法是瀏覽器需要等待返回的方法才能處理窗口環境生成的光標更改消息,但這可能是關閉的,即使它是真的我不知道如何解決它。

還有其他想法嗎?


[編輯]:我決定我所有的背景故事並不是真的有必要。 如果您真的想閱讀它,請查看修訂歷史記錄。


最終結果

我最終使用了RoBorg的解決方案。 它並沒有像我最初想的那樣搞亂代碼,因為我可以將函數聲明保持在那里 - 就像添加內聯作用域一樣。

有趣的是,在Firefox上我發現這意味着我根本不需要更改光標。 我發現在添加setTimeout調用后,我有時會在設置進度游標之前看到等待光標顯示,所以我注釋掉了我的游標代碼。 事實證明,使用setTimeout將其推出click事件處理程序本身允許FireFox自己確定游標應該更改。 不幸的是,IE並不那么聰明,所以我確實把光標代碼放回去了。

這使我相信光標變化是適當的動作 - 這給了機會它是瀏覽器無論如何都要做的事情。 我真的不想在DOM中添加和刪除新項目(如某種類型的繁忙圖像)以獲取我對此知之甚少的頁面。 無論頁面使用何種視覺設計,腳本都應匹配。

最后,Chrome讓整個事情變得無關緊要。 使用相同的數據,Chrome可以在不到5秒的時間內完成IE和Firefox 10到15秒的完成。 所以他們的javascript引擎確實更快。 我等不及Firefox 3.1引擎了。 不幸的是,這里的人仍然大多使用IE6。

使用計時器是不可能的?

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

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

在網絡中,更改鼠標光標不是傳統的,也不是很好。

在頁面本身上使用一些小動畫要好得多(也更容易),請查看http://www.ajaxload.info/以獲取此類圖像(它是一個在線生成器)。

嘗試刪除document.body.style.cursor =“auto”並將其放入完成SortTable函數時調用的函數中。 這樣,您將保留忙碌光標,直到該功能完成。 如果您在SortTable()中遇到錯誤情況,請確保仍然遇到“不再忙”函數調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM