您好,登錄后才能下訂單哦!
利用vue怎么實現(xiàn)一個鼠標切換頁面功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
原理很簡單,就是把所有頁面放在一個div中,然后滾動的時候改變外層div的top即可。
因為滾動條監(jiān)聽事件是實時的,所以要加上節(jié)流來防止頁面切換太快速,我這控制在1.5s才能切換一頁。
其實vue不應該操作dom,應該用數(shù)據(jù)來渲染虛擬dom,但是有些地方暫時沒找到合適的方法,還是用的dom操作。
<template> <div id="wrap" :> <div id="main" :> <ul id="pageUl" type="circle"> <li id="pageUlLi1" class="pageUlLi" :class="{'active': curIndex == 1}"> </li> <li id="pageUlLi2" class="pageUlLi" :class="{'active': curIndex == 2}"> </li> <li id="pageUlLi3" class="pageUlLi" :class="{'active': curIndex == 3}"> </li> <li id="pageUlLi4" class="pageUlLi" :class="{'active': curIndex == 4}"> </li> <li id="pageUlLi5" class="pageUlLi" :class="{'active': curIndex == 5}"> </li> </ul> <div id="page1" class="page"></div> <div id="page2" class="page"></div> <div id="page3" class="page"></div> <div id="page4" class="page"></div> <div id="page5" class="page"></div> </div> </div> </template> <script> export default { name: 'Home', data(){ return{ screenWeight: 0, // 屏幕寬度 screenHeight: 0, // 屏幕高度 index: 1, // 用于判斷翻頁 curIndex: 1, // 當前頁的index startTime: 0, // 翻屏起始時間 endTime: 0, // 上一次翻屏結(jié)束時間 nowTop: 0, // 翻屏后top的位置 pageNum: 0, // 一共有多少頁 main: Object, obj: Object } }, mounted(){ this.screenWeight = document.documentElement.clientWidth; this.screenHeight = document.documentElement.clientHeight; this.main = document.getElementById("main"); this.obj = document.getElementsByTagName("div"); for (let i = 0; i < this.obj.length; i++) { if (this.obj[i].className == 'page') { this.obj[i].style.height = this.screenHeight + "px"; } } this.pageNum = document.querySelectorAll(".page").length; // 瀏覽器兼容 if ((navigator.userAgent.toLowerCase().indexOf("firefox") != -1)) { document.addEventListener("DOMMouseScroll", this.scrollFun, false); } else if (document.addEventListener) { document.addEventListener("mousewheel", this.scrollFun, false); } else if (document.attachEvent) { document.attachEvent("onmousewheel", this.scrollFun); } else { document.onmousewheel = this.scrollFun; } }, methods:{ scrollFun(event) { this.startTime = new Date().getTime(); // mousewheel事件中的 “event.wheelDelta” 屬性值:返回的如果是正值說明滾輪是向上滾動 // DOMMouseScroll事件中的 “event.detail” 屬性值:返回的如果是負值說明滾輪是向上滾動 let delta = event.detail || (-event.wheelDelta); // 如果當前滾動開始時間和上次滾動結(jié)束時間的差值小于1.5s,則不執(zhí)行翻頁動作,這樣做是為了實現(xiàn)類似節(jié)流的效果 if ((this.startTime - this.endTime) > 1500) { if (delta > 0 && parseInt(this.main.offsetTop) >= -(this.screenHeight * (this.pageNum - 2))) { // 向下滾動 this.index++; this.toPage(this.index); }else if (delta < 0 && parseInt(this.main.offsetTop) < 0) { // 向上滾動 this.index--; this.toPage(this.index); } // 本次翻頁結(jié)束,記錄結(jié)束時間,用于下次判斷 this.endTime = new Date().getTime(); } }, // 翻頁 toPage(index) { if (index != this.curIndex) { let delta = index - this.curIndex; this.nowTop = this.nowTop - delta * this.screenHeight; this.curIndex = index; } } } } </script> <style> html, body { height: 100%; } body, ul, li, a, p, div { /*慎刪*/ padding: 0px; margin: 0px; } #wrap { overflow: hidden; width: 100%; } #main { position: relative; transition:top 1.5s; } .page { /*謹刪*/ width: 100%; margin: 0; } #pageUl { position: fixed; right: 10px; bottom: 50%; } .active{ color: red; } </style>
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。