一:各个模块不相同情况

1、内容部分

<div class="anchor">

<div v-for="(item,index) in anchors" :class="anchorIndex==index ? 'item selected':'item'"
     @click="anchorClick(index)">
<a :href="'#'+index">{{item}}</a>
</div>
</div>
2、锚点部分
anchorClick(index) {
console.info(index)
this.anchorIndex = index
},
3、滚动条事件监听(必须写在watch()或者mounted()里
window.addEventListener('scroll',this.handleScroll,true)
4、根据高度自动选中对应的标签
handleScroll(){
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop
console.info(scrollTop)
if(scrollTop > 600 && scrollTop < 800){
this.anchorIndex = 1
}
if(scrollTop > 800){
this.anchorIndex = 2
}
if(scrollTop < 600){
this.anchorIndex = 0
}

},
二、各个模块都相同(转自本溢)
<template>
<div>
<div class="div">
<ul class="navgator">
<li class="navgatorLi" :class="{'isActive': index===navgatorIndex}" @click="handleLeft(index)" v-for="(item,index) in navgator" :key="item">{{item}}</li>
</ul>
<ul class="rightList">
<li :id="'id'+index" v-for="(item,index) in listBox" :key="item">{{item}}</li>
</ul>
</div>
</div>
</template> <script>
export default {
data() {
return {
navgator: [
'列表A',
'列表B',
'列表C',
'列表D',
],
navgatorIndex: 0,
listBox: [
'A','B','C','D'
],
listBoxState: true,//点击导航栏时,暂时停止监听页面滚动
};
},
created() { },
mounted() {
let timeId;
window.addEventListener('scroll', () => {
// 页面滚动停止100毫秒后才会执行下面的函数。
clearTimeout(timeId);
timeId = setTimeout(() => {
this.scrollToTop();
console.log('执行完了哦');
}, 100);
} , true);
},
methods: {
// 点击导航菜单,页面滚动到指定位置
handleLeft(index) {
this.navgatorIndex = index; this.$el.querySelector(`#id${index}`).scrollIntoView({
behavior: "smooth", // 平滑过渡
block: "start" // 上边框与视窗顶部平齐。默认值
});
this.listBoxState=false; let timeId;
clearTimeout(timeId);
timeId = setTimeout(() => {
this.listBoxState=true;
},200);
},
// 监听页面元素滚动,改变导航栏选中
scrollToTop() {
// 获取视窗高度
var domHight = document.body.offsetHeight;
// dom滚动位置
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; if (this.listBoxState) {//作用是点击导航栏时,延迟这里执行。
this.listBox.map((v,i) => {
// 获取监听元素距离视窗顶部距离
var offsetTop = document.getElementById(`id${i}`).offsetTop;
// 获取监听元素本身高度
var scrollHeight = document.getElementById(`id${i}`).scrollHeight; // 如果 dom滚动位置 >= 元素距离视窗距离 && dom滚动位置 <= 元素距离视窗距离+元素本身高度
// 则表示页面已经滚动到可视区了。
if (scrollTop >= offsetTop && scrollTop<=(offsetTop+scrollHeight)) {
// 导航栏背景色选中
this.navgatorIndex = i;
}
})
}
},
},
}
</script> <style lang='less' scoped>
.div {
width: 100%;
background: #ededed;
}
.navgator {
width: 200px;
position: fixed;
top: 0;
.navgatorLi {
width: 100%;
height: 1rem;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #ccc;
border-top: none;
}
.isActive {
color: #fff;
background: darkseagreen;
}
}
.rightList {
width: 560px;
margin-left : 200px;
li {
width: 100%;
height: 10rem;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #ccc;
}
}
</style>

vue 点击元素滚动到指定位置(滑动到指定位置对应标签自动选中)的更多相关文章

  1. 纯javaScript实现元素平滑滚动,改进前两个版本,支持鼠标滚轮滚动和点击元素滚动,滚动更顺畅

    windowScroll(id, number, distance, direction, obj) 参数介绍: 1.id:所要滚动的元素id; 2.number:滚动次数; 3.distance:每 ...

  2. html js点击按钮滚动跳转定位到页面指定位置(DIV)的方法代码

    一:通过html锚点实现滚动定位到页面指定位置(DIV):    如果我们要点击实现跳转的地方是一个html锚点,也就是点击一个A标签超链接实现跳转,可以把A标签的href属性直接指向跳转指定位置的d ...

  3. vue点击元素变色兄弟元素不变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 通过scrollTop,使子元素滚动至指定位置

    想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢? 在代码实现之前,先了解下相关关键点. 1.scrollHeight 属性 通过 scrollHeight 属性可获得子元素的滚动高 ...

  5. scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置

    scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s&g ...

  6. contains 之 点击元素外位置隐藏元素

    contains 之 点击元素外位置隐藏元素 api: contains   检测一个元素包含在另一个元素之内  详解:http://www.runoob.com/jquery/misc-contai ...

  7. Flutter获取点击元素的位置与大小

    使用 WidgetsBindingObserver获取 class CloseTap extends StatefulWidget { @override _CloseTapTapState crea ...

  8. vue 点击当前元素添加class 去掉兄弟的class 获取当前点击元素的文字

    点击当前标签给其添加class,兄弟标签class删除 然后获取当前点击元素的文字 演示地址: https://xibushijie.github.io/static/addClass.html &l ...

  9. vue中监听页面滚动和监听某元素滚动

    ①监听页面滚动 在生命周期mounted中进行监听滚动: mounted () { window.addEventListener('scroll', this.scrollToTop) }, 在方法 ...

  10. VUE 监听局部滚动 设置ICON的位置跟随

    效果图如下: 目的: 为了让 + 号与 - 号跟随在当前 tr 的前边 第一步: 当tr指针经过时获取tr的相对位置 HTML JS 第二步:给滚动的div元素添加滚动事件获取滚动的高度 最后:设置I ...

随机推荐

  1. 添加 Echarts bi库

    1.安装库和依赖 npm i echarts --save npm i ngx-echarts --save npm i resize-observer-polyfill --save-dev 2.相 ...

  2. ding抓回放

    fiddler 添加代码 var sToInsert = "<script src='https://cdn.jsdelivr.net/gh/Tencent/vConsole@3.8. ...

  3. mogdb的一主两备

    # 一.环境准备 |节点类别|主机名|IP||-|-|-||主节点|mogdb1 |192.168.3.68||备节点1|mogdb2 |192.168.3.69||备节点2|mogdb3|192.1 ...

  4. mfc拷贝到我的电脑出现的问题

    拿到工程解压打开,霍,挺好 往下面翻了翻看到了这个 再怎么错误,怎么会没有string呢?看了看头文件,包含的有,所以 我去找了一下string.h的位置 项目->属性->VC++目录-& ...

  5. combox下拉框控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 微信小程序tabBar图标显示失败问题

    练习tabBar时发现链入的图片在没有任何语句语法错误以及报错的情况下显示失败 试了很多办法 最后请教了一下学长才知道需要重启小程序开发工具并清缓存 问题解决

  7. JAVA操作Mongo 数组模糊查询

    引入mongo-java-driver-3.0.4 jar 工具类 //mongodb 连接数据库工具类public class MongoDBUtil { //不通过认证获取连接数据库对象 publ ...

  8. Markdwn学习

    Markdwn学习 标题: 标题 二级标题 三级标题 几个标题有几个#(最多六级标题) 字体 Hell,World! 粗体两边加** Hello,World! 斜体两边加* Hello,World! ...

  9. python + unittest + request + parameterized 参数化遇到中文名称testcase不显示的问题

    最近使用python+unittest+request+parameterized做接口测试,然后在利用parameterized做参数化时,发现测试用例的中文名称,感觉很奇怪,于是跟踪了parame ...

  10. 配置tomcat 服务 启动模式

    1配置Tomcat的环境变量,其步骤如下: 计算机右击属性,打开环境变量---系统变量---新建变量名:CATALINA_HOME,变量值为:D:\Program Files\Apache Softw ...