vue框架中实现锚点定位的具体代码是什么
Admin 2022-06-02 群英技术资讯 989 次浏览
这篇文章主要介绍“vue框架中实现锚点定位的具体代码是什么”,有一些人在vue框架中实现锚点定位的具体代码是什么的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。本文实例为大家分享了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">
<div v-for="(item,index) in tableObject" :key="index" style="height:500px">
<div class="title scroll-item" :id="item.name">{{item.name}}</div>
<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>
</div>
</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;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
微信小程序自定义导航的方法 本文实例为大家分享了微信小程序自定义导航的具体代码,供大家参考,具体内容如下 在app.js中获取状态栏信息和胶囊按钮信息 onLaunch() { // 展示本地存储能力 const logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) // 获取系统信息 this.globalData.systemInfo
微信小程序的图片选择控件怎样实现?在使用微信小程序上传图片时,一般我们都需要用到图片选择控件,这样我们能比较便捷的从手机本地相差将图片上传到微信上,那么小程序的图片选择控件效果是如何实现的呢?下面我们一起来学习一下。
在面试的时候,很多面试官再问vue的时候可能就会提一嘴,你知道keep-alive有什么作用吗?keep-alive是vue内置的一个组件,而这个组件的作用就是能够缓存不活动的组件,我们能够知道,一般情况下,组件进行切换的时候,默认会进行销毁,如果有需求,某...
这篇文章主要为大家详细介绍了JavaScript实现滑块验证解锁,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
有时候我们会遇到对数组进行筛选的需求,例如在一组输入的数字中,筛选出符合要求的数组,那么这用JavaScripy要怎样实现呢?下面就给大家分享一下js实现筛选数组的代码。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008