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自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue递归实现树形组件
Jul 15 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的分页功能
2007/03/21 PHP
令PHP初学者头疼十四条问题大总结
2008/11/12 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
div层的移动及性能优化
2010/11/16 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
js转换对象为xml
2017/02/17 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
Python数据结构之翻转链表
2017/02/25 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
处理textarea中的换行和空格
2019/12/12 HTML / CSS
校园新闻广播稿
2014/01/10 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
见习期个人总结
2015/03/05 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis