日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent)

發布時間:2024/9/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在用VUE寫一個后臺管理系統,頂部標簽頁涉及鼠標滾輪事件,由于每個瀏覽器對滾輪事件的處理方式不一樣,個人對這個又不懂,折騰了很久,參考了大神的代碼,也把百度翻爛了,找到了一篇陳舊的博文(其實是主題很土,發布時間未知)。寫得非常清楚,解決了我的問題。

先看看我標簽頁的界面:

如果打開的標簽超過滾動區域寬度,會顯示滾動條,支持鼠標滾輪左右滾動。這里涉及wheelEvent的2個屬性:wheelDelta 和 deltaY,后面轉載的博文會詳細測試。

首先在MDN網站看到了官方概念:

這里獲得2個信息:

①傳統的mousewheel事件已經充用,請使用wheel事件。

②不要通過判斷滾輪方向來推斷文檔滾動方向。

下面正式推薦大神的博文:

前段時間使用canvas做滾動條控件,添加滾輪事件時,查閱了一些資料,發現大都是文檔描述或簡單示例,對于開發者還是不夠。wheelEvent對象中的一些屬性(比如wheelDelta、detail等)雖然官方文檔有完整描述,但部分或大部分瀏覽器廠商并沒有(真正)實現,這就很容易誘導大家錯誤使用。所以我針對當前常用瀏覽器重新測試了一下。

一、測試目標

探索wheelEvent事件中常用屬性的有效性,垂直步進算法(滑動幅度)以及與電腦個性化設置的關聯。

二、測試環境

Windows操作系統,Firefox54、Chrome59、IE9、IE10、IE11、Edge瀏覽器。

三、測試屬性

deltaY、detail、wheelDelta。

電腦個性化設置:操作系統鼠標滑輪垂直行數n(默認值:3)

輔助關聯參數:瀏覽器窗口高度H用來驗證deltaY的推導公式

測試代碼:

var onwheel = function(e){

var _log = "",

_ie9 = navigator.userAgent.indexOf("MSIE 9.0") > 0,

_h = _ie9 ? window.innerHeight : document.body.clientHeight; //兼容IE9

_log += "deltaY:" + e.deltaY;

_log += "|wheelDelta:" + e.wheelDelta;

_log += "|detail:" + e.detail;

_log += "|H:" + _h;

console.log(_log);

};

document.addEventListener("wheel", onwheel, false);

測試結果:

四、結果分析

1、Firefox有效屬性deltaY,正值向下滾動,絕對值為操作系統鼠標滑輪垂直行數設置;

2、IE系列有效屬性deltaY,正值向下滾動,絕對值為滾動幅度(像素數,計算方式:窗口高度×鼠標滾輪垂直行數÷20)

3、Edge有效屬性deltaY,同IE系列,并且支持wheelDelta屬性(向上120,向下-120,但為常量,只能判斷方向,與滾輪速率無關,有種被欺騙的感覺。。。)

4、Chrome有效屬性deltaY,正值向下滾動,絕對值為滾動幅度(像素數,計算方式:100×鼠標滾輪垂直行數÷3)并且支持wheelDelta,與Edge一樣,也是假值;

5、測試的幾款瀏覽器deltaY都與操作系統鼠標滾輪垂直行數正相關;

6、IE系列與Edge瀏覽器deltaY與瀏覽器窗口高度相關(瀏覽器以當前窗口可容20行,來動態計算行高),Chrome與窗口高度無關;

五、結論

1、可靠屬性:deltaY,方向判斷方法一致(正值向下滾動,負值向上滾動),與操作系統鼠標設置有關聯,但需注意絕對值算法不統一

2、無用屬性:detail,wheelDelta(未實現,即使Chrome與Edge也是假值,這與mdn、w3c等文檔描述有差異,但看網絡相關分享、jquery控件等卻發現很多人都在使用。。。)

3、功能方面:Firefox能直觀反映滾動行數,但不能直觀與瀏覽器默認滾動條保持同步;其他幾組瀏覽器則恰好相反;

4、個人建議:個人認為wheelDelta的最初設計思想很好,電腦鼠標滾輪垂直行數默認值是3,wheelDelta默認值120,即單行行高40px,即使用戶電腦做了個性化設置,像素值也不會出現循環小數,避免了Chrome的deltaY設計缺陷,有利于行業規范化,所以建議各瀏覽器廠商能完整支持wheelDelta這一屬性。

六、應用領域

滾動條控件滾輪事件設計:滾輪效果應該有效使用電腦個性化設置

方案一、固定步距(滾動幅度):按推導公式計算鼠標滾動行數n值,設定固定行高H,幅度=n×H

方案二、嵌入式(與瀏覽器默認效果同步):Firefox使用body字號作為行高H,幅度=deltaY×H;其他瀏覽器,幅度=deltaY

七、VUE中的實踐

下面是代碼,自行參考:

ref="scrollContainer"

:vertical="false"

class="scroll-container"

@wheel.native.prevent="handleScroll"

>

export default {

name: "ScrollPane",

data() {

return {

left: 0

};

},

methods: {

handleScroll(e) {

// wheelDelta:獲取滾輪滾動方向,向上120,向下-120,但為常量,與滾輪速率無關

// deltaY:垂直滾動幅度,正值向下滾動。電腦鼠標滾輪垂直行數默認值是3

// wheelDelta只有部分瀏覽器支持,deltaY幾乎所有瀏覽器都支持

const eventDelta = e.wheelDelta || -e.deltaY * 40;

const $scrollWrapper = this.$refs.scrollContainer.$refs.wrap;

// 0到scrollLeft為滾動區域隱藏部分

$scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4;

}

}

};

總結

以上是生活随笔為你收集整理的java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。