最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中的element tabs點擊錨點定位,鼠標(biāo)滾動定位

 更新時間:2024年07月24日 10:22:37   作者:李澤舉  
這篇文章主要介紹了Vue中的element tabs點擊錨點定位,鼠標(biāo)滾動定位方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、效果圖

二、代碼

  1. html
<el-tabs
      class="customer-tab"
      type="card"
      @tab-click="jump"
      v-model="tabName"
    >
      <el-tab-pane
        v-for="(tab, index) in tabs"
        :name="tab.refName"
        :key="index"
        :label="tab.name"
      ></el-tab-pane>
    </el-tabs>
    <div
      class="scroll-content"
      @scroll="onScroll"
      :style="
        'overflow-x: hidden; overflow-y: auto;height:' + contentStyleObj.height
      "
    >
      <!-- 用戶管理 -->
      <div :ref="tabs[0].refName" class="scroll-item">
        <div class="line-name">
          <h2>{{ tabs[0].name }}</h2>
        </div>
        <div>
          <p
            style="height: 40px"
            v-for="item in [
              0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
            ]"
            :key="item"
          >
            待發(fā)貨符合規(guī)范化如故
          </p>
        </div>
      </div>
      <!-- 配置管理 -->
      <div :ref="tabs[1].refName" class="scroll-item">
          <div class="line-name">
          <h2>{{ tabs[1].name }}</h2>
        </div>
        <div>
          <p
            style="height: 40px"
            v-for="item in [
              0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
            ]"
            :key="item"
          >
            新能說出的基本功發(fā)到你DNF不得發(fā)布
          </p>
        </div>
      </div>
      <!-- 角色管理 -->
      <div
        :ref="tabs[2].refName"
        class="scroll-item"
        style="padding-top: 1rem; top: 5px"
      >
      <div class="line-name">
          <h2>{{ tabs[2].name }}</h2>
        </div>
        <div>
          <p
            v-for="item in [
              0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
            ]"
            :key="item"
          >
            新水泥廠劇場版
          </p>
        </div>
      </div>
      <!-- 角色管理2 -->
      <div
        :ref="tabs[3].refName"
        class="scroll-item"
        style="padding-top: 1rem; top: 5px"
      >
      <div class="line-name">
          <h2>{{ tabs[3].name }}</h2>
        </div>
        <div>
          <p
            v-for="item in [
              0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
            ]"
            :key="item"
          >
            新水泥廠劇場版
          </p>
        </div>
      </div>
    </div>
  1. js
<script>
export default {
  name: 'index',
  props: {},
  components: {},
  data() {
    return {
      tabIndex: '0',
      contentStyleObj: {
        height: '100px',
      },
      tabName: 'setOneRef',
      tabs: [
        {
          name: '用戶管理',
          refName: 'setOneRef',
        },
        {
          name: '配置管理',
          refName: 'setTwoRef',
        },
        {
          name: '角色管理',
          refName: 'setThreeRef',
        },
        {
          name: '角色管理2',
          refName: 'setFourRef',
        },
      ],
    }
  },
  computed: {},
  watch: {},
  created() {
    this.getHight()
    window.addEventListener('resize', this.getHight)
  },
  destroyed() {
    window.removeEventListener('resize', this.getHight)
  },
  methods: {
    // tab click
    jump(tab, event) {
      let target = document.querySelector('.scroll-content')
      let scrollItems = document.querySelectorAll('.scroll-item')
      // 判斷滾動條是否滾動到底部
      if (target.scrollHeight <= target.scrollTop + target.clientHeight) {
        this.tabIndex = tab.index.toString()
      }
      let totalY = scrollItems[tab.index].offsetTop - scrollItems[0].offsetTop // 錨點元素距離其offsetParent(這里是body)頂部的距離(待滾動的距離)
      let distance = document.querySelector('.scroll-content').scrollTop // 滾動條距離滾動區(qū)域頂部的距離
      // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // 滾動條距離滾動區(qū)域頂部的距離(滾動區(qū)域為窗口)
      // 滾動動畫實現(xiàn), 使用setTimeout的遞歸實現(xiàn)平滑滾動,將距離細(xì)分為50小段,10ms滾動一次
      // 計算每一小段的距離
      let step = totalY / 50
      if (totalY > distance) {
        smoothDown(document.querySelector('.scroll-content'))
      } else {
        let newTotal = distance - totalY
        step = newTotal / 50
        smoothUp(document.querySelector('.scroll-content'))
      }

      // 參數(shù)element為滾動區(qū)域
      function smoothDown(element) {
        if (distance < totalY) {
          distance += step
          element.scrollTop = distance
          setTimeout(smoothDown.bind(this, element), 10)
        } else {
          element.scrollTop = totalY
        }
      }

      // 參數(shù)element為滾動區(qū)域
      function smoothUp(element) {
        if (distance > totalY) {
          distance -= step
          element.scrollTop = distance
          setTimeout(smoothUp.bind(this, element), 10)
        } else {
          element.scrollTop = totalY
        }
      }
    },
    // 滾動條滾動
    onScroll(e) {
      let scrollItems = document.querySelectorAll('.scroll-item')
      for (let i = scrollItems.length - 1; i >= 0; i--) {
        // 判斷滾動條滾動距離是否大于當(dāng)前滾動項可滾動距離
        let judge =
          e.target.scrollTop >=
          scrollItems[i].offsetTop - scrollItems[0].offsetTop - 400
        if (judge) {
          this.tabIndex = i.toString()
          // 找對應(yīng)的tab-name值
          this.tabName = this.tabs[this.tabIndex].refName
          break
        }
      }
    },
    getHight() {
      this.contentStyleObj.height = window.innerHeight - 190 + 'px'
    },
  },
}
</script>
  1. css
<style lang="scss" scoped>
::v-deep.customer-tab {
  width: 100%;
  height: 50px;
  background-color:#f5f7fa;
  padding: 4px;
}
::v-deep.el-tabs--card > .el-tabs__header {
  border-bottom: none;
  margin: 0;
  .el-tabs__nav {
    width: 100%;
    display: flex;
    justify-content: space-around;
    border: none;
    .el-tabs__item {
      width: 25%;
      text-align: center;
      border: none;
    }
    .is-active {
      border-radius: 4px;
      background-color: #005BD9;
      color: #fff;
    }
  }
}
</style>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從0開始學(xué)Vue

    從0開始學(xué)Vue

    從零開始學(xué)Vue,通過一些例子,讓大家概覽一些基本的概念和特性,理解Vue的基礎(chǔ)知識,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • vue如何在多個不同服務(wù)器下訪問不同地址

    vue如何在多個不同服務(wù)器下訪問不同地址

    這篇文章主要介紹了vue如何在多個不同服務(wù)器下訪問不同地址,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺談Vuex的this.$store.commit和在Vue項目中引用公共方法

    淺談Vuex的this.$store.commit和在Vue項目中引用公共方法

    這篇文章主要介紹了淺談Vuex的this.$store.commit和在Vue項目中引用公共方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3響應(yīng)式高階用法之shallowReadonly()使用

    Vue3響應(yīng)式高階用法之shallowReadonly()使用

    在前端開發(fā)中,Vue3的shallowReadonly() API允許開發(fā)者創(chuàng)建部分只讀的狀態(tài),這對于保持頂層屬性不變而內(nèi)部屬性可變的場景非常有用,本文將詳細(xì)介紹?shallowReadonly()?的使用方法及其應(yīng)用場景,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 使用 vue 實例更好的監(jiān)聽事件及vue實例的方法

    使用 vue 實例更好的監(jiān)聽事件及vue實例的方法

    這篇文章主要介紹了使用 vue 實例更好的監(jiān)聽事件及vue實例的方法,介紹了一種新增 vue 實例的方法,單獨監(jiān)聽事件,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue文件上傳Required request part ‘file‘ is not present問題

    vue文件上傳Required request part ‘file‘ is&n

    這篇文章主要介紹了vue文件上傳Required request part ‘file‘ is not present問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue?組件上的v-model雙向綁定原理解析

    Vue?組件上的v-model雙向綁定原理解析

    這篇文章主要介紹了Vue?組件上的v-model雙向綁定原理,從本文的學(xué)習(xí)可以知道組件上v-model指令的本質(zhì)也是生成了value屬性和input事件,具體實例代碼跟隨小編一起看看吧
    2022-05-05
  • Vue Element前端應(yīng)用開發(fā)之界面語言國際化

    Vue Element前端應(yīng)用開發(fā)之界面語言國際化

    我們開發(fā)的系統(tǒng),一般可以不用考慮語言國際化的問題,大多數(shù)系統(tǒng)一般是給本國人使用的,而且直接使用中文開發(fā)界面會更加迅速 一些,不過框架最好能夠支持國際化的處理,以便在需要的時候,可以花點時間來實現(xiàn)多語言切換的處理,使系統(tǒng)具有更廣泛的受眾用戶。
    2021-05-05
  • FastAPI和Vue實現(xiàn)文件分片上傳+秒傳+斷點續(xù)傳的完整思路

    FastAPI和Vue實現(xiàn)文件分片上傳+秒傳+斷點續(xù)傳的完整思路

    本文介紹了使用FastAPI和Vue實現(xiàn)大文件分片上傳的方法,包括文件切片、哈希校驗、秒傳和斷點續(xù)傳等核心概念,并提供了后端FastAPI和前端Vue的實現(xiàn)思路及關(guān)鍵代碼片段,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • vue 驗證兩次輸入的密碼是否一致的方法示例

    vue 驗證兩次輸入的密碼是否一致的方法示例

    這篇文章主要介紹了vue 驗證兩次輸入的密碼是否一致的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論

通道| 瓮安县| 尉犁县| 长汀县| 邹平县| 闽侯县| 芜湖市| 紫金县| 江西省| 牙克石市| 襄汾县| 哈巴河县| 偏关县| 元阳县| 汨罗市| 吴江市| 城固县| 民权县| 大同县| 萨迦县| 萨嘎县| 延津县| 石柱| 恩平市| 开鲁县| 阳东县| 宁武县| 三门峡市| 马公市| 凤阳县| 伊宁市| 平遥县| 应城市| 青神县| 桓仁| 余庆县| 贵南县| 云梦县| 石阡县| 洛川县| 巨鹿县|