vue实现某元素吸顶或固定位置显示(监听滚动事件)


Posted in Javascript onDecember 13, 2017

最近写了一个VUE的web app项目,需要实现某个部位吸顶的效果。即,页面往上滑动,刚好到达该部位时,该部分,固定在顶部显示。

vue实现某元素吸顶或固定位置显示(监听滚动事件)

1、监听滚动事件
利用VUE写一个在控制台打印当前的scrollTop,
首先,在mounted钩子中给window添加一个滚动滚动监听事件,

mounted () {
 window.addEventListener('scroll', this.handleScroll)
},

然后在方法中,添加这个handleScroll方法

handleScroll () {
 var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
 console.log(scrollTop)
},

控制台打印结果:

vue实现某元素吸顶或固定位置显示(监听滚动事件)

2、监听元素到顶部的距离  并判断滚动的距离如果大于了元素到顶部的距离时,设置searchBar为true,否则就是false

handleScroll () {
 var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
 var offsetTop = document.querySelector('#searchBar').offsetTop
 if (scrollTop > offsetTop) {
 this.searchBarFixed = true
 } else {
 this.searchBarFixed = false
 }
},

先写一个该元素固定到顶部的样式,isFixed(less写法)

.searchBar{
 .isFixed{
 position:fixed;
 background-color:#Fff;
 top:0;
 z-index:999;
 }
 ul {
 WIDTH:100%;
 height: 40px;
 line-height: 40px;
 display: flex;
 li {
 font-size: 0.8rem;
 text-align: center;
 flex: 1;
 i {
 font-size: 0.9rem;
 padding-left: 5px;
 color: #ccc;
 }
 }
 border-bottom: 1px solid #ddd;
 }
}

然后将需要固定的元素的class与searchBar进行绑定,如果searchBar为true时,就应用这个isFixed样式

<div class="searchBar" id="searchBar">
 <ul :class="searchBarFixed == true ? 'isFixed' :''">
 <li>区域<i class="iconfont icon-jiantouxia"></i></li>
 <li>价格<i class="iconfont icon-jiantouxia"></i></li>
 <li>房型<i class="iconfont icon-jiantouxia"></i></li>
 <li>更多<i class="iconfont icon-jiantouxia"></i></li>
 </ul>
</div>

固定后的结果:

vue实现某元素吸顶或固定位置显示(监听滚动事件)

注意,如果离开该页面需要移除这个监听的事件,不然会报错。

destroyed () {
 window.removeEventListener('scroll', this.handleScroll)
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断脚本加载是否完成的方法
May 26 Javascript
一个基于jquery的图片切换效果
Jul 06 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
彻底学会Angular.js中的transclusion
Mar 12 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
使用Vue 实现滑动验证码功能
Jun 27 Javascript
详解Vue之事件处理
Jul 10 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
vue组件中使用iframe元素的示例代码
Dec 13 #Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 #Javascript
vue实现nav导航栏的方法
Dec 13 #Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 #Javascript
仿京东快报向上滚动的实例
Dec 13 #Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 #Javascript
vue-router路由懒加载和权限控制详解
Dec 13 #Javascript
You might like
玛琪朵 Macchiato
2021/03/03 咖啡文化
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
vue中的mvvm模式讲解
2019/01/31 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
ant design实现圈选功能
2019/12/17 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
js实现缓动动画
2020/11/25 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python3.5使用tkinter制作记事本
2016/06/20 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
烹饪自我鉴定
2014/03/01 职场文书
安全保证书怎么写
2015/02/28 职场文书
2015入党自传书范文
2015/06/26 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python
Golang并发工具Singleflight
2022/05/06 Golang