vue监听滚动事件的方法


Posted in Vue.js onDecember 21, 2020

vue中监听滚动事件,然后对其进行事件处理,一般有:1. 滚动到顶部吸附; 2. 根据滚动的位置激活对应的tab键(锚链接tab键)

这两种方式的处理都是可通过监听scroll来实现

mounted(){
window.addEventListener('scroll',this.handleScroll) // 监听滚动事件,然后用handleScroll这个方法进行相应的处理
}

处理方法

1. 滚动到顶部吸附

html元素

<!--如果isFixed为true的话,就添加class is_fixed 设置固定定位-->
<div id="boxFixed" :class="{'is_fixed' : isFixed}">
这个是要滚动到顶部吸附的元素
</div>

methods方法

handleScroll(){
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop // 滚动条偏移量

let offsetTop = document.querySelector('#boxFixed').offsetTop; // 要滚动到顶部吸附的元素的偏移量

this.isFixed = scrollTop > offsetTop ? true : false; // 如果滚动到顶部了,this.isFixed就为true
}

2. 根据滚动的位置激活对应的tab键(锚链接tab键)

vue里实现锚链接,不能直接用a链接方式,因为用的是hash路由,直接a链接会跳转路由,可用scrollIntoView ,具体参照 https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView

(1) 实现锚链接:

<div class="flexitem" v-for="(item,index) in tabs" :class="seeThis==index?'active':''"><a href="javascript:void(0)" rel="external nofollow" @click="goAnchor(index)">{{item}}</a></div>

<div id="anchor1">block1</div>

(2) 实现滚动到相应的位置激活tab

data(){
return{


seeThis:0,


tabs:['tab0','tab1','tab2'],

}
},
methods:{

goAnchor(index) { // 也可以用scrollIntoView方法, 但由于这里头部设置了固定定位,所以用了这种方法


// document.querySelector('#anchor'+index).scrollIntoView()


this.seeThis = index; var anchor = this.$el.querySelector('#anchor'+index)


document.body.scrollTop = anchor.offsetTop-100


document.documentElement.scrollTop = anchor.offsetTop-100

},
}
methods:{
handleScroll(){


var anchorOffset0 = this.$el.querySelector('#anchor0').offsetTop-100


var anchorOffset1 = this.$el.querySelector('#anchor1').offsetTop-100


var anchorOffset2 = this.$el.querySelector('#anchor2').offsetTop-100


if(scrollTop>anchorOffset0&&scrollTop<anchorOffset1){



this.seeThis = 0


}


if(scrollTop>anchorOffset1&&scrollTop<anchorOffset2){



this.seeThis = 1


}


if(scrollTop>anchorOffset2){



this.seeThis = 2


}

},
}

以上就是vue监听滚动事件的方法的详细内容,更多关于vue监听滚动事件的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
vue el-upload上传文件的示例代码
Dec 21 #Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 #Vue.js
vue中如何添加百度统计代码
Dec 19 #Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 #Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 #Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 #Vue.js
Vue——前端生成二维码的示例
Dec 19 #Vue.js
You might like
用PHP读取超大文件的实例代码
2012/04/01 PHP
php适配器模式介绍
2012/08/14 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
详解vue-router基本使用
2017/04/18 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
Python3 处理JSON的实例详解
2017/10/29 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
导致python中import错误的原因是什么
2020/07/01 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
家长对孩子评语
2014/01/30 职场文书
捐书倡议书
2014/08/29 职场文书
云台山导游词
2015/02/03 职场文书
调解协议书范本
2016/03/21 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
详解redis分布式锁的这些坑
2021/05/19 Redis
MySQL修炼之联结与集合浅析
2021/10/05 MySQL