中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用vue怎么實現一個鼠標切換頁面功能

發布時間:2020-12-14 14:24:26 來源:億速云 閱讀:346 作者:Leah 欄目:開發技術

利用vue怎么實現一個鼠標切換頁面功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

原理很簡單,就是把所有頁面放在一個div中,然后滾動的時候改變外層div的top即可。

因為滾動條監聽事件是實時的,所以要加上節流來防止頁面切換太快速,我這控制在1.5s才能切換一頁。

其實vue不應該操作dom,應該用數據來渲染虛擬dom,但是有些地方暫時沒找到合適的方法,還是用的dom操作。

<template>
  <div id="wrap" :>
    <div id="main" :>
      <ul id="pageUl" type="circle">
        <li id="pageUlLi1" class="pageUlLi" :class="{'active': curIndex == 1}">&nbsp;</li>
        <li id="pageUlLi2" class="pageUlLi" :class="{'active': curIndex == 2}">&nbsp;</li>
        <li id="pageUlLi3" class="pageUlLi" :class="{'active': curIndex == 3}">&nbsp;</li>
        <li id="pageUlLi4" class="pageUlLi" :class="{'active': curIndex == 4}">&nbsp;</li>
        <li id="pageUlLi5" class="pageUlLi" :class="{'active': curIndex == 5}">&nbsp;</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,       // 上一次翻屏結束時間
        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);
        // 如果當前滾動開始時間和上次滾動結束時間的差值小于1.5s,則不執行翻頁動作,這樣做是為了實現類似節流的效果
        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);
          }
          // 本次翻頁結束,記錄結束時間,用于下次判斷
          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>

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潍坊市| 益阳市| 巫溪县| 略阳县| 桂东县| 大安市| 盈江县| 南乐县| 彩票| 桃源县| 晋中市| 汝阳县| 临西县| 平邑县| 华宁县| 阿鲁科尔沁旗| 耿马| 明星| 绥中县| 云霄县| 杨浦区| 开阳县| 庆城县| 太白县| 屯门区| 文山县| 会东县| 井研县| 威远县| 安图县| 长白| 湘阴县| 宣武区| 会理县| 南康市| 奈曼旗| 原平市| 定日县| 通河县| 泸水县| 吴忠市|