vue模态框实现动态锚点

 更新时间:2022年07月05日 12:57:30   作者:crystal.xj  
这篇文章主要为大家详细介绍了vue模态框实现动态锚点,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue模态框实现动态锚点的具体代码,供大家参考,具体内容如下

参考:vue中实现锚点跳转及滚动监听的简便方法

效果图:

代码:

// html代码
<template>
  <div id="app">
    <el-dialog
        class="abow_dialog"
        title="增加内容"
        :visible.sync="DialogVisible"
        width="80%"
        center
        >
        <div class="steps">
          <ul>
            <li v-for="(item,index) in title_list" :key="index">
              <span ref="spans" :style="{color: activeStep === index ? '#1987e1' : '#000000'}" @click="jump(index)">
                <i class="el-icon-thumb"></i>{{item.title}}
              </span>
            </li>
          </ul>
        </div>

        <div class="result" @scroll="onScroll" >
          <div class="scroll-item"><span>第一项项</span></div>
          <div class="scroll-item"><span>第二项项</span></div>
          <div class="scroll-item"><span>第三项项</span></div>
          <div class="scroll-item"><span>第四项项</span></div>
          <div class="scroll-item"><span>第五项项</span></div>
          <div class="scroll-item"><span>第六项项</span></div>
        </div>

        <span slot="footer" class="dialog-footer" text-align="right">
          <el-button @click="DialogVisible = false">取 消</el-button>
          <el-button type="primary" @click="DialogVisible = false">确 定</el-button>
        </span>
      </el-dialog>
  </div>
</template>
// js代码
<script>
  export default {
    name: 'dialogandmaod',
    data() {
      return {
        DialogVisible: true, //一般默认是false,为了方便查看就设置成了true
        activeStep :0,
        title_list:[
          {title:'第一项项'},
          {title:'第二项项'},        
          {title:'第三项项'},
          {title:'第四项项'},
          {title:'第五项项'},
          {title:'第六项项'},
        ]
      }
    },
    methods:{
      jump(index) {
        var items = document.querySelectorAll(".scroll-item");
        for (var i = 0; i < items.length; i++) {
          if (index === i) {
            items[i].scrollIntoView({
              block: "start",//默认跳转到顶部
              behavior: "smooth"//滚动的速度
            });
          }
        }
      },
      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;
          if (judge) {
            this.activeStep = i;
            break;
          }
        }
      }    
    }
  }
</script>
// css代码
<style lang="scss">
.el-dialog--center .el-dialog__footer {
  text-align: right !important;
}
.abow_dialog {
  display: flex;
  justify-content: center;
  align-items: Center;
  overflow: hidden;
  .el-dialog {
    margin: 0 auto !important;
    height: 90%;
    overflow: hidden;
    .steps{
      background-color: #fff;
      max-height: calc(-16px + 100vh);
      position: fixed;
      width: 98px;
      top: 90px;
      right: 2%;
      ul {
        list-style: none;
        padding-left: 5px;
        margin: 12px 0;
      }
      li {
        margin: 7px 5px;
        span{
          cursor:pointer;
          &:hover{
            color: #88bcec !important;
          }
          i{
            margin-right: 5px;
          }
        }
      }
    }
    .result {
      position: absolute;
      left: 10px;
      top: 54px;
      bottom: 70px;
      right: 0;
      padding: 0;
      overflow-y: scroll;
      .scroll-item {
        width: 100%;
        height: 500px;
        margin-top:20px;
        background: rgb(137, 238, 238);
        >span {
          font-size: 20px;
        }
        &:first-child {
          margin-top: 0;
        }
        &:last-child {
          height: 500px;
        }
      }
    }
    .el-dialog__footer{
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
    }
  }
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue3实现按钮权限管理的项目实践

    vue3实现按钮权限管理的项目实践

    在做后台管理系统时,经常会有权限管理的功能,本文主要介绍了vue3实现按钮权限管理的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 详解vue2.6插槽更新v-slot用法总结

    详解vue2.6插槽更新v-slot用法总结

    在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。这篇文章主要介绍了详解vue2.6插槽更新v-slot用法总结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Vue之自定义事件内容分发详解

    Vue之自定义事件内容分发详解

    这篇文章主要为大家介绍了Vue的自定义事件内容分发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • vue中使用require动态获取图片地址方式

    vue中使用require动态获取图片地址方式

    这篇文章主要介绍了vue中使用require动态获取图片地址方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 如何使用vite搭建vue3项目详解

    如何使用vite搭建vue3项目详解

    Vite 是一个面向现代浏览器的更轻,更快的web应用开发工具,下面这篇文章主要给大家介绍了关于如何使用vite搭建vue3项目的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Vue项目中如何运用vuex的实战记录

    Vue项目中如何运用vuex的实战记录

    如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但无论是代码量还是流程规范性都是前者较优,下面这篇文章主要给大家介绍了关于Vue项目中如何运用vuex的相关资料,需要的朋友可以参考下
    2021-09-09
  • vue+iview Table表格多选切换分页保持勾选状态

    vue+iview Table表格多选切换分页保持勾选状态

    这篇文章主要为大家详细介绍了vue+iview Table表格多选切换分页保持勾选状态,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • vue.js实例对象+组件树的详细介绍

    vue.js实例对象+组件树的详细介绍

    这篇文章主要介绍了vue.js实例对象+组件树的相关资料,需要的朋友可以参考下
    2017-10-10
  • Vue计算属性与监视(侦听)属性的使用深度学习

    Vue计算属性与监视(侦听)属性的使用深度学习

    这篇文章主要介绍了Vue计算属性与监视(侦听)属性的使用,计算属性指的是通过一系列运算之后,最终得到一个值,watch监视(侦听)器允许开发者监视数据的变化,从而针对数据的变化做特定的操作,本文就这两种属性给大家详细讲解,感兴趣的朋友一起学习吧
    2022-11-11
  • 关于vue中ref的使用(this.$refs获取为undefined)

    关于vue中ref的使用(this.$refs获取为undefined)

    这篇文章主要介绍了关于vue中ref的使用(this.$refs获取为undefined),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论