vueelementui三级菜单(vue+element ui实现锚点定位)
类别:编程学习 浏览量:1989
时间:2021-10-22 07:59:32 vueelementui三级菜单
vue+element ui实现锚点定位本文实例为大家分享了vue + element ui 实现锚点定位的具体代码,供大家参考,具体内容如下
vue
<el-row :gutter="20"> <el-col :span="3"> <!--导航选择事件--> <el-menu :default-active="activeStep" @select="jump"> <el-menu-item v-for="(item,index) in menuData" :index="`${index}`" :key="item.subjectId"> <i class="el-icon-menu"></i> <span slot="title">{{item.subjectName}}</span> </el-menu-item> </el-menu> </el-col> <!--绑定scroll事件需要监听--> <el-col :span="21" class="scroll_cls" @scroll="onScroll"> <li v-for="(item,index) in tableObject" :key="index" style="height:500px"> <li class="title scroll-item" :id="item.name">{{item.name}}</li> <el-table :data="item.rows" :key="index"> <el-table-column label="序号" type="index" width="50"></el-table-column> <el-table-column prop="channelId" label="渠道/团队id"></el-table-column> <el-table-column prop="channelName" label="渠道/团队"></el-table-column> <el-table-column prop="ruleCode" label="分配方案id"></el-table-column> <el-table-column prop="ruleName" label="分配方案名称"></el-table-column> <el-table-column prop="ruleVersion" label="版本号"></el-table-column> <el-table-column prop="hierarchy" label="级别"> <template slot-scope="scope"> <span>{{scope.row.hierarchy == 1 ? '项目' : '渠道团队'}}</span> </template> </el-table-column> <el-table-column label="有效期"> <template slot-scope="scope"> <span>{{scope.row.beginTime + '-' + scope.row.endTime}}</span> </template> </el-table-column> <el-table-column prop="creatorName" label="操作人"></el-table-column> <el-table-column prop="createTime" label="操作时间"></el-table-column> <el-table-column prop="orderCnt" label="关联订单"> <template slot-scope="scope"> <el-button @click="orderHandleClick(scope.row.orderCnt)" type="text" size="small" >{{scope.row.orderCnt}}</el-button> </template> </el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button @click="settingHandleClick(scope.row)" type="text" size="small">设置分配方案</el-button> </template> </el-table-column> </el-table> <el-pagination v-if="item.total > 5" style="margin-top: 15px" size="small" @size-change="handleSizeChange($event,index)" @current-change="handleCurrentChange($event,index)" :current-page="ruleForm.ageNum" :page-sizes="[10, 30, 50, 100]" :page-size="ruleForm.pageSize" layout="total, sizes, prev, pager, next" :total="item.total" ></el-pagination> </li> </el-col> </el-row>
js
// 滚动触发按钮高亮 methods: { onScroll(e) { let scrollItems = document.querySelectorAll(".scroll-item"); console.log(scrollItems) console.log(e) for (let i = scrollItems.length - 1; i >= 0; i--) { // 判断滚动条滚动距离是否大于当前滚动项可滚动距离 let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop; if (judge) { console.log(i) this.activeStep = i.toString(); break; } } }, jump(index) { console.log(index) let target = document.querySelector(".scroll_cls"); let scrollItems = document.querySelectorAll(".scroll-item"); // 判断滚动条是否滚动到底部 if (target.scrollHeight <= target.scrollTop + target.clientHeight) { console.log(index) console.log(typeof index) this.activeStep = index; } let total = scrollItems[index].offsetTop - scrollItems[0].offsetTop; // 锚点元素距离其offsetParent(这里是body)顶部的距离(待滚动的距离) console.log(total) let distance = document.querySelector(".scroll_cls").scrollTop; // 滚动条距离滚动区域顶部的距离 console.log(distance) // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // 滚动条距离滚动区域顶部的距离(滚动区域为窗口) // 滚动动画实现, 使用setTimeout的递归实现平滑滚动,将距离细分为50小段,10ms滚动一次 // 计算每一小段的距离 let step = total / 50; if (total > distance) { smoothDown(document.querySelector(".scroll_cls")); } else { let newTotal = distance - total; step = newTotal / 50; smoothUp(document.querySelector(".scroll_cls")); } // 参数element为滚动区域 function smoothDown(element) { if (distance < total) { distance += step; element.scrollTop = distance; setTimeout(smoothDown.bind(this, element), 10); } else { element.scrollTop = total; } } // 参数element为滚动区域 function smoothUp(element) { if (distance > total) { distance -= step; element.scrollTop = distance; setTimeout(smoothUp.bind(this, element), 10); } else { element.scrollTop = total; } } document.querySelectorAll('.scroll-item').forEach((item, index1) => { if (index === index1) { item.scrollIntoView({ block: 'start', behavior: 'smooth' }) } }) }, }, mounted() { this.$nextTick(() => { console.log(1) window.addEventListener('scroll', this.onScroll,true) }) },
css
.scroll_cls { height: 500px; overflow: auto; }
转载自:原文链接点击这里
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- vue引入axios(vue封装axios的几种方法)
- vue常用的指令和修饰符(Vue中 Vue.prototype使用详解)
- vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
- vue使用echarts教程(Vue使用echarts可视化组件的方法)
- vue3.0带参数的方法(Vue3中ref与toRef的区别浅析)
- vueelementui三级菜单(vue+element ui实现锚点定位)
- vue将弹框抽离成组件(vue3 可拖动的左右面板分割组件实现)
- 使用vue-cli构建electron项目(MAC+PyCharm+Flask+Vue.js搭建系统)
- vue-router的两种模式(vue-route路由管理的安装与配置方法)
- vue中的ref(Vue3.0中Ref与Reactive的区别示例详析)
- vue3 兄弟组件(vue3如何按需加载第三方组件库详解)
- vue3 响应式的实现过程(Vue3.x使用mitt.js进行组件通信)
- vue中的mapgetter优势(vuex 中辅助函数mapGetters的基本用法详解)
- vue elementui 按钮样式修改(vue+elementui 实现新增和修改共用一个弹框的完整代码)
- vuefor指令使用教程(Vue必学知识点之forEach的使用)
- 面试问vue掌握程度如何回答(面试最常问的13种Vue修饰符)
- 《极限挑战》深访都市夜归人,夜间打工者体验,黄磊录完憔悴了(极限挑战深访都市夜归人)
- Google 推出了一个游戏生成器,让不会编程的你也能自己设计游戏(推出了一个游戏生成器)
- 二胎家庭老大爱闹情绪,用这招很有效(二胎家庭老大爱闹情绪)
- 一个30岁男人外遇失败的全过程(一个30岁男人外遇失败的全过程)
- 《无敌破坏王2》 不聊彩蛋,聊聊我从动画里看到的现实那些事儿(无敌破坏王2不聊彩蛋)
- 《寄生虫》 三观不正 人类悲欢从来不相通,感同身受也并非本能(寄生虫三观不正)
热门推荐
- flashfxp如何设置中文(flashfxp怎么用?flashfxp使用方法)
- sqlserver纵表变横表(SQL Server行转列的方法解析)
- 磐石云香港VPS服务器怎么样?磐石云香港VPS CN2线路测评(磐石云香港VPS服务器怎么样?磐石云香港VPS CN2线路测评)
- php实现redis消息队列(redis+php实现微博三微博列表功能详解)
- sql2012登录失败(详解安装sql2012出现错误could not open key...解决办法)
- html5布局(Html5让容器充满屏幕高度或自适应剩余高度的布局实现)
- python怎么判断对象属性(判断python对象是否可调用的三种方式及其区别详解)
- thinkphp框架多文件上传完整代码(Thinkphp5 自定义上传文件名的实现方法)
- docker正常容器启动失败(Docker容器无法停止删除的解决方案)
- docker容器测试环境构建(docker容器内安装TensorRT的问题)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9