JS無法捕獲滾動條上的mouse up事件的原因猜想
更新時間:2012年03月21日 11:14:29 作者:
當(dāng)用戶鼠標(biāo)在滾動條上按下的時候,我們可以假設(shè)他(她)正在瀏覽聊天內(nèi)容,那么這個時候好的用戶體驗就不能讓滾動條再自動滾動了
比如一個網(wǎng)頁的聊天室,滾動條會隨著內(nèi)容的增加自動往下滾動。
當(dāng)用戶鼠標(biāo)在滾動條上按下的時候,我們可以假設(shè)他(她)正在瀏覽聊天內(nèi)容,那么這個時候好的用戶體驗就不能讓滾動條再自動滾動了。
為了實現(xiàn)這個功能,可能大家首先會想到的就是mouse down 和 mouse up事件了。
可是具體實現(xiàn)的時候我們會發(fā)現(xiàn)在滾動條上按下鼠標(biāo)左鍵再松開的時候,捕獲不到mouse up了。如下面例子
<html>
<head>
<title></title>
<script type="text/javascript">
var captureTarget = null;
function down(obj, e) {
captureTarget = obj;
// 如果是IE可以打開注釋
// captureTarget.setCapture();
e = e ? e : window.event;
}
function up(obj,e) {
// if (captureTarget)
// captureTarget.releaseCapture();
e = e ? e : window.event;
div2.innerText = e.srcElement.tagName;
}
document.addListener = function(event, callback) {
if (!document.all)
this.addEventListener(event, callback);
else
this.attachEvent("on"+event, callback);
}
document.addListener("mouseup", function(){alert(1);});
</script>
</head>
<body >
<div style="width:200px;height:200px;overflow:scroll" onmousedown="down(this, event);">
<div style="height:500px; width:500px"></div>
</div>
</body>
</html>
保存為html格式文件,瀏覽器打開,然后在滾動條上左鍵點擊試試,再在其他地方點擊試試。
由于沒有深入研究過W3C的文檔,這里只能猜想。
考慮到滾動條的特性,可能瀏覽器在鼠標(biāo)按下滾動條的時候給滾動條setCapture了,而鼠標(biāo)松開之后給他releaseCapture,滾動條又不屬于Dom對象,所以在鼠標(biāo)釋放之前無法捕獲mouseup事件。
當(dāng)用戶鼠標(biāo)在滾動條上按下的時候,我們可以假設(shè)他(她)正在瀏覽聊天內(nèi)容,那么這個時候好的用戶體驗就不能讓滾動條再自動滾動了。
為了實現(xiàn)這個功能,可能大家首先會想到的就是mouse down 和 mouse up事件了。
可是具體實現(xiàn)的時候我們會發(fā)現(xiàn)在滾動條上按下鼠標(biāo)左鍵再松開的時候,捕獲不到mouse up了。如下面例子
復(fù)制代碼 代碼如下:
<html>
<head>
<title></title>
<script type="text/javascript">
var captureTarget = null;
function down(obj, e) {
captureTarget = obj;
// 如果是IE可以打開注釋
// captureTarget.setCapture();
e = e ? e : window.event;
}
function up(obj,e) {
// if (captureTarget)
// captureTarget.releaseCapture();
e = e ? e : window.event;
div2.innerText = e.srcElement.tagName;
}
document.addListener = function(event, callback) {
if (!document.all)
this.addEventListener(event, callback);
else
this.attachEvent("on"+event, callback);
}
document.addListener("mouseup", function(){alert(1);});
</script>
</head>
<body >
<div style="width:200px;height:200px;overflow:scroll" onmousedown="down(this, event);">
<div style="height:500px; width:500px"></div>
</div>
</body>
</html>
保存為html格式文件,瀏覽器打開,然后在滾動條上左鍵點擊試試,再在其他地方點擊試試。
由于沒有深入研究過W3C的文檔,這里只能猜想。
考慮到滾動條的特性,可能瀏覽器在鼠標(biāo)按下滾動條的時候給滾動條setCapture了,而鼠標(biāo)松開之后給他releaseCapture,滾動條又不屬于Dom對象,所以在鼠標(biāo)釋放之前無法捕獲mouseup事件。
相關(guān)文章
JavaScript Event學(xué)習(xí)第四章 傳統(tǒng)的事件注冊模型
在這一章我會講解給元素注冊事件的最好的一種辦法,那就是:確保一個特定的事件在特定的HTML元素上發(fā)生并且能運行特定的腳本。2010-02-02javascript中使用replaceAll()函數(shù)實現(xiàn)字符替換的方法
第一次發(fā)現(xiàn)JavaScript中replace()?方法如果直接用str.replace("-","!")?只會替換第一個匹配的字符.2010-12-12JavaScript數(shù)組排序功能簡單實現(xiàn)
這篇文章主要介紹了JavaScript數(shù)組排序功能簡單實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05js貪吃蛇網(wǎng)頁版游戲特效代碼分享(挑戰(zhàn)十關(guān))
這篇文章主要為大家詳細(xì)介紹了js貪吃蛇網(wǎng)頁版游戲特效,游戲總共有十關(guān),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-08-08javascript KeyDown、KeyPress和KeyUp事件的區(qū)別與聯(lián)系
KeyDown、KeyPress和KeyUp事件的區(qū)別與聯(lián)系,以后就可以根據(jù)需求來選擇使用。2009-12-12