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

vue實現(xiàn)錨點跳轉之scrollIntoView()方法詳解

 更新時間:2022年09月16日 11:18:02   作者:zky的博客  
這篇文章主要介紹了vue實現(xiàn)錨點跳轉之scrollIntoView()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue錨點跳轉scrollIntoView()方法

滾動到某個特定元素 

scrollIntoView();這個方法不用獲取右邊小標題的高度,啥都不用,有id或者class就行啦,幾乎可以滿足你錨點跳轉的所有需求,對齊方式,以及平滑滾動了

這里是v-for循環(huán)出來需要點擊跳轉到對應div的事件

<p> v-for="(value,index) in data" @click="scrollToPosition(index)">{{...}}</p> ?

這就是你點擊scrollToPosition事件需要滾動對應的div

<div> v-for="(value,index) in data" class="roll">{{...}}</div> ?

js部分

methods:{
? scrollToPosition(index){
? ? ?document.getElementsByClassName('roll')[index].scrollIntoView()
}

這樣就利用scrollIntoView()簡單實現(xiàn)了一個錨點跳轉,下邊來看一個scrollIntoView中的一些屬性

  • scrollIntoView(true)相等于scrollIntoView();元素的頂端將和其所在滾動區(qū)的可視區(qū)域的頂端對齊

為true時相應的 scrollIntoViewOptions: {block: “start”, inline: “nearest”}。這是這個參數(shù)的默認值。

  • scrollIntoView(false)元素的底端將和其所在滾動區(qū)的可視區(qū)域的底端對齊

為false時相應的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。

同時他的參數(shù)也可以是一個object對象

? scrollIntoView({
? behavior:auto //定義動畫過渡效果"auto"或 "smooth" 之一。默認為 "auto"。
? block:start//定義垂直方向的對齊, "start", "center", "end", 或 "nearest"之一。默認為 "start"。
? inline:nearest//"start", "center", "end", 或 "nearest"之一。默認為 "nearest"。
? })

其中smooth是平滑滾動 start和end是目標滾動到的位置

注意:

兼容性的問題多數(shù)主流瀏覽器已經(jīng)支持其基本功能,也就是說,使用true,false兩個參數(shù),來實現(xiàn)木訥的定位(沒有滾動動畫)是沒有任何問題的,但是傳入object參數(shù)時,就不得不說一句,IE各種版本會直接忽略,全部看成true參數(shù)屬性,如果想看到滾動動畫,就只有火狐和chrome 

一個簡單的vue錨點跳轉demo

拿去直接粘貼就可

<template>
  <div class="auto-adjust-edit" >
    <!-- 按鈕 -->
    <div class="operation-btn">
        <div class="btn-item" v-for="(item, index) in partList" :key="index" @click="jump(index)"
            :style="{background: activeStep === index ? '#eeeeee' : '#ffffff'}">{{item}}
        </div>
    </div>
    <!-- 滾動區(qū)域 -->
    <div class="scroll-content" @scroll="onScroll">
      <div class="scroll-item">
          <div class="part-title">基本信息</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">風險控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">成本控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">量級控制</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">新計劃管理</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">老計劃管理</div>
      </div>
      <div class="scroll-item">
          <div class="part-title">垃圾計劃清理</div>
      </div>
    </div>
    
  </div>
</template>
<script>
export default {
    data() {
        return {
            activeStep: 0,
            partList: ['基本信息', '風險控制', '成本控制', '量級控制', '新計劃管理', '老計劃管理', '垃圾計劃清理']
        }
    },
    methods: {
        // 滾動觸發(fā)按鈕高亮
        onScroll (e) {
            let scrollItems = document.querySelectorAll('.scroll-item')
            for (let i = scrollItems.length - 1; i >= 0; i--) {
                // 判斷滾動條滾動距離是否大于當前滾動項可滾動距離
                let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop - 100;
                if (judge) {
                    this.activeStep = i
                    break
                }
            }
        },
        // 點擊切換錨點
        jump (index) {
            let target = document.querySelector('.scroll-content')
            let scrollItems = document.querySelectorAll('.scroll-item')
            // 判斷滾動條是否滾動到底部
            if (target.scrollHeight <= target.scrollTop + target.clientHeight) {
                this.activeStep = index
            }
            let total = scrollItems[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)平滑滾動,將距離細分為50小段,10ms滾動一次
            // 計算每一小段的距離
            let step = total / 50
            if (total > distance) {
                smoothDown(document.querySelector('.scroll-content'))
            } else {
                let newTotal = distance - total
                step = newTotal / 50
                smoothUp(document.querySelector('.scroll-content'))
            }
            // 參數(shù)element為滾動區(qū)域
            function smoothDown (element) {
                if (distance < total) {
                    distance += step
                    element.scrollTop = distance
                    setTimeout(smoothDown.bind(this, element), 1)
                } else {
                    element.scrollTop = total
                }
            }
            // 參數(shù)element為滾動區(qū)域
            function smoothUp (element) {
                if (distance > total) {
                    distance -= step
                    element.scrollTop = distance
                    setTimeout(smoothUp.bind(this, element), 1)
                } else {
                    element.scrollTop = total
                }
            }
            // document.querySelectorAll('.scroll-item').forEach((item, index1) => {
            //   if (index === index1) {
            //     item.scrollIntoView({
            //       block: 'start',
            //       behavior: 'smooth'
            //     })
            //   }
            // })
        }
    }
}
</script>
<style lang="scss" scoped>
  .auto-adjust-edit {
    flex-basis: 100%;
    display: flex;
    overflow: hidden;
    height: 500px;
    height: 100%;
    // 側邊欄
    .operation-btn {
        width: 9.5%;
        height: 95%;
        margin-right: 0.5%;
        padding-top: 1%;
        margin-top: 4px;
        background: white;
        border: 1px solid rgb(190, 188, 188);
        border-radius: 6px;
        box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.2);
        .btn-item {
            height: 40px;
            line-height: 40px;
            padding-left: 20px;
            cursor: pointer;
        }
    }
    // 表單內容
    .scroll-content {
        height: 100%;
        width: 90%;
        overflow: auto;
        .scroll-item {
            background: white;
            border-radius: 8px;
            margin-bottom: 6px;
            border: 1px solid rgb(216, 214, 214);
            min-height: 300px;
            // 標題
            .part-title {
                height: 40px;
                line-height: 40px;
                font-weight: 600;
                padding-left: 10px;
            }
            // 表單
            /deep/.el-form {
                border: 1px solid rgb(190, 189, 189);
                width: 98%;
                margin: 10px auto 30px;
                border-radius: 6px;
                /deep/.el-form-item {
                margin-bottom: 12px;
                margin-top: 10px;
                }
            }
        }
    }
  }
</style>

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

相關文章

  • vue中forEach循環(huán)的使用講解

    vue中forEach循環(huán)的使用講解

    這篇文章主要介紹了vue中forEach循環(huán)的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue大屏數(shù)據(jù)展示示例

    Vue大屏數(shù)據(jù)展示示例

    公司的大數(shù)據(jù)工作組就需要通過數(shù)據(jù)大屏展示一些處理過后有價值的信息,本文主要介紹了Vue大屏數(shù)據(jù)展示示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 關于在vue中實現(xiàn)過渡動畫的代碼示例

    關于在vue中實現(xiàn)過渡動畫的代碼示例

    Vue是一款流行的前端框架,支持過渡動畫的實現(xiàn)是其中的一項重要特性,在Vue中,使用過渡動畫可以為用戶提供更加友好的用戶體驗,下面我將為大家介紹一下子如何在Vue中實現(xiàn)過渡動畫,需要的朋友可以參考下
    2023-06-06
  • vue3 vite配置跨域及不生效問題解決

    vue3 vite配置跨域及不生效問題解決

    這篇文章主要介紹了vue3 vite配置跨域以及不生效問題,本文給大家分享完美解決方案,需要的朋友可以參考下
    2023-07-07
  • vue3和beego跨域請求配置方式

    vue3和beego跨域請求配置方式

    文章介紹了如何在Vue3和Beego中配置跨域請求,在Beego的router.go文件的init函數(shù)中添加option函數(shù)來回應預檢請求,以支持跨域請求,這是個人經(jīng)驗分享,希望能幫助到大家
    2025-01-01
  • 如何使用HBuilderX把vue項目打包成apk

    如何使用HBuilderX把vue項目打包成apk

    這篇文章主要介紹了如何使用HBuilderX把vue項目打包成apk,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue快速實現(xiàn)通用表單驗證的方法

    Vue快速實現(xiàn)通用表單驗證的方法

    這篇文章主要介紹了Vue快速實現(xiàn)通用表單驗證的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 前端Vue2、Vue3和不同版本nuxt的插槽使用詳解

    前端Vue2、Vue3和不同版本nuxt的插槽使用詳解

    這篇文章主要介紹了前端Vue2、Vue3和不同版本nuxt的插槽使用的相關資料,Vue2和Vue3中,插槽機制允許在組件模板中定義占位符,并在使用組件時插入自定義內容,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • 使用VUE和webrtc-streamer實現(xiàn)實時視頻播放(監(jiān)控設備-rtsp)

    使用VUE和webrtc-streamer實現(xiàn)實時視頻播放(監(jiān)控設備-rtsp)

    WebRTC-streamer是一項使用簡單機制通過WebRTC流式傳輸視頻捕獲設備和RTSP源的實驗,下面這篇文章主要給大家介紹了關于如何使用VUE和webrtc-streamer實現(xiàn)實時視頻播放(監(jiān)控設備-rtsp)的相關資料,需要的朋友可以參考下
    2022-11-11
  • 解決vue 綁定對象內點擊事件失效問題

    解決vue 綁定對象內點擊事件失效問題

    今天小編就為大家分享一篇解決vue 綁定對象內點擊事件失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

福清市| 萝北县| 海兴县| 库伦旗| 错那县| 罗甸县| 年辖:市辖区| 昌黎县| 苗栗县| 花莲县| 洞口县| 北辰区| 习水县| 郁南县| 高碑店市| 平阴县| 吉水县| 淮南市| 桂林市| 南漳县| 武定县| 和静县| 呼图壁县| 虹口区| 黄冈市| 兴宁市| 杭锦后旗| 大悟县| 兖州市| 济源市| 靖宇县| 上饶县| 鄢陵县| 咸宁市| 游戏| 五河县| 外汇| 鹤壁市| 靖边县| 六枝特区| 紫云|