欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue使用原生js實現(xiàn)滾動頁面跟蹤導(dǎo)航高亮的示例代碼

 更新時間:2018年10月25日 11:23:24   作者:小恐龍  
這篇文章主要介紹了vue使用原生js實現(xiàn)滾動頁面跟蹤導(dǎo)航高亮的示例代碼,滾動頁面指定區(qū)域?qū)Ш礁吡?。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

需要使用vue做一個專題頁面。滾動頁面指定區(qū)域?qū)Ш礁吡痢?br />

監(jiān)聽滾動頁面事件,對比當(dāng)前頁面的位置與元素的位置,如果當(dāng)前滾動的區(qū)域位置大于元素的位置,導(dǎo)航添加class,其他去掉class進行樣式切換。

我使用的方法是在定位元素上添加id,在導(dǎo)航添加data-id屬性,監(jiān)聽滾動事件,如果當(dāng)前滾動區(qū)域大于定位元素區(qū)域,將元素的id賦值給變量,然后與導(dǎo)航的data-id進行匹配,切換class。

html結(jié)構(gòu)

main.vue

<template>
 <div class="qz-home">
  <div class="quiz-container">
   <div class="quiz-ad-pic" id="pagetop"></div>
   <div class="quiz-main">
    <div class="quiz-main-inside" id="js-content">
     <quiz-sessions class="item" id="quizhall"></quiz-sessions>
     <quizRecords class="item" id="quizrecord"></quizRecords>
     <quiz-history class="item" id="quizHistory"></quiz-history>
     <quiz-mine class="item" id="quizMine"></quiz-mine>
     <quiz-rank class="item" id="quizRank"></quiz-rank>
     <quiz-rule class="item" id="quizRule"></quiz-rule>
    </div>
   </div>
   <navigation id="js-nav"></navigation>
  </div>
 </div>
</template>

navigation.vue

<template>
 <nav class="nav-container">
  <div class="nav-mark"></div>
  <div class="nav-main">
   <ul class="nav-list">
    <li :class="{'cur': curindex === index}" v-for="(item, index) in navList" :key="index" :data-id="item.id"><a @click="linkTo(item.id, index)">{{item.name}}</a></li>
   </ul>
   <div class="backtop" @click="backTop()">
    <a></a>
   </div>
  </div>
 </nav>
</template>

javascript

export default {
 name: "Navigation",
 data() {
  return {
   navList: [
    { name: "競猜大廳", id: "quizhall" },
    { name: "競猜記錄", id: "quizrecord" },
    { name: "歷史賽事", id: "quizHistory" },
    { name: "我的競猜", id: "quizMine" },
    { name: "排行榜", id: "quizRank" },
    { name: "玩法", id: "quizRule" }
   ],
   curindex: 0
  };
 },
 mounted() {
  this.initScroll();
 },
 methods: {
  initScroll() {
   window.addEventListener('scroll', function() {
    // 封裝類名函數(shù)集:判斷、移除、增加、獲?。ê唵未直┌妫?;
    function removeClass(obj, cls) {
     if (obj.className == cls) {
      obj.className = "";
     }
    }
    function addClass(obj, cls) {
     if (obj.className != cls) {
      obj.className = cls;
     }
    }

    let pos = document.documentElement.scrollTop;
    if (pos > 300) {
     document.querySelector('.nav-container').style.display = 'block';
    } else {
     document.querySelector('.nav-container').style.display = 'none';
    }
    var menus = document.getElementById("js-nav").getElementsByTagName("li");
    var items = document.getElementById("js-content").querySelectorAll(".item");
    var currentId = "";
    
    for (var i = 0; i < items.length; i++) {
     var _item = items[i];
     var _itemTop = _item.offsetTop;
     if (pos > _itemTop - 200) {
      currentId = _item.id;
     } else {
      break;
     }
    }
    if (currentId) {
     for (var j = 0; j < menus.length; j++) {
      var _menu = menus[j];
      // href屬性獲取的是整個link,需以#為界截除獲取最后一個元素;
      var _href = _menu.getAttribute('data-id');
      if (_href != currentId) {
       removeClass(_menu, "cur");
      } else {
       addClass(_menu, "cur");
      }
     }
    }
   })
  }
 }
};

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決vue prop傳值default屬性如何使用,為何不生效的問題

    解決vue prop傳值default屬性如何使用,為何不生效的問題

    這篇文章主要介紹了解決vue prop傳值default屬性如何使用,為何不生效的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 一文詳解Vue中渲染器的簡單實現(xiàn)

    一文詳解Vue中渲染器的簡單實現(xiàn)

    渲染器用于完成渲染操作,比如在瀏覽器平臺上渲染器可以將虛擬DOM轉(zhuǎn)換為真實DOM,本文將通過一個簡單例子來帶大家理解Vue中渲染器的工作過程,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Vue.js通用應(yīng)用框架-Nuxt.js的上手教程

    Vue.js通用應(yīng)用框架-Nuxt.js的上手教程

    本篇文章主要介紹了Vue.js通用應(yīng)用框架-Nuxt.js的上手教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 在Vue中創(chuàng)建可重用的 Transition的方法

    在Vue中創(chuàng)建可重用的 Transition的方法

    這篇文章主要介紹了在Vue中創(chuàng)建可重用的 Transition,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • vue項目如何讓局域網(wǎng)ip訪問配置設(shè)置

    vue項目如何讓局域網(wǎng)ip訪問配置設(shè)置

    這篇文章主要介紹了vue項目如何讓局域網(wǎng)ip訪問配置設(shè)置,具有很好的參考價值,希望對大家有所幫助。
    2022-09-09
  • Vue通過provide inject實現(xiàn)組件通信

    Vue通過provide inject實現(xiàn)組件通信

    這篇文章主要介紹了Vue通過provide inject實現(xiàn)組件通信,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Vue自定義全局Toast和Loading的實例詳解

    Vue自定義全局Toast和Loading的實例詳解

    這篇文章主要介紹了Vue自定義全局Toast和Loading,需要的朋友可以參考下
    2019-04-04
  • vue3中el-uplod結(jié)合ts實現(xiàn)圖片粘貼上傳

    vue3中el-uplod結(jié)合ts實現(xiàn)圖片粘貼上傳

    本文主要介紹了vue3中el-uplod結(jié)合ts實現(xiàn)圖片粘貼上傳,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • VUEX采坑之路之獲取不到$store的解決方法

    VUEX采坑之路之獲取不到$store的解決方法

    今天小編就為大家分享一篇VUEX采坑之路之獲取不到$store的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue 實現(xiàn)上傳組件

    vue 實現(xiàn)上傳組件

    雖然前端UI框架大都提供文件上傳的組件,以及很多插件可供選擇,工作中可能不需要我們手寫一個上傳組件,但是從零封裝組件對學(xué)習(xí)是很有助益的。下文為大家介紹使用Vue3+TypeScript實現(xiàn)的一個文件上傳的功能,目前只實現(xiàn)上傳等基本功能,后續(xù)會逐漸對功能進行擴展
    2021-05-05

最新評論