将方法写出来,销毁在beforeDestroy写。

mounted(){
window.addEventListener("scroll",this.handleFun),
},
methods:{
handleFun(){
let t = document.documentElement.scrollTop || document.body.scrollTop;
let tabBar = document.getElementById("tabBar");
if( t >= 88 ) {
tabBar.style.cssText="position:fixed;top:0;z-index:999";
} else {
tabBar.style.position="relative";
}
}
},
beforeDestroy(){
window.removeEventListener("scroll",this.handleFun)
}

以下几种方法同样有效:

//把scroll的匿名函数挂到this上

mounted(){
this.tabScroll();
},
methods:{
tabScroll(){
this.scroll_ = function () {
let t = document.documentElement.scrollTop || document.body.scrollTop;
console.log(t);
let tabBar = document.getElementById("tabBar");
if( t >= 88 ) {
tabBar.style.cssText="position:fixed;top:0;z-index:999";
} else {
tabBar.style.position="relative";
}
}
window.addEventListener("scroll",this.scroll_);
},
},
destroyed(){
window.removeEventListener("scroll",this.scroll_);
}
methods:{
tabScroll(){
window.addEventListener("scroll",this.handleScroll);
},
handleScroll(){
let t = document.documentElement.scrollTop || document.body.scrollTop;
console.log(t);
let tabBar = document.getElementById("tabBar");
if( t >= 88 ) {
tabBar.style.cssText="position:fixed;top:0;z-index:999";
} else {
tabBar.style.position="relative";
}
}
},
mounted(){
this.tabScroll();
},
beforeDestroy(){
window.removeEventListener("scroll",this.handleScroll);
}

这里有一点需要注意:

给vue组件绑定scroll事件,如果直接在 mounted钩子中写window.addEventListener("scroll",handleFun()),
则页面并不会执行scroll事件,原因如下:

  1. 要销毁handleFun的话,得把handleFun写在method
  2. 应该是window.addEventListener("scroll",this.handleFun)window.removeEventListener("scroll",this.handleFun),  
  3. 而不是window.addEventListener("scroll",this.handleFun())window.removeEventListener("scroll",this.handleFun())

第二个参数应该是一个function,而不是执行它。

感谢各位朋友的指导~

vue如何正确销毁当前组件的scroll事件?的更多相关文章

  1. Vue中如何监听组件的原生事件

    在首页开发中,右下角有一个返回顶部的小箭头,将它单独封装成一个BackTop组件,但是它何时出现需要依赖于首页的滑动,即另外一个Scroll组件.如果直接在BackTop组件里面监听,则需要通过thi ...

  2. Vue中调用另一个组件中自定义事件

    之前在一个场景中,遇到组件需要调用父组件中的方法tableInit(),字组件调用父组件常用的有三种方法,具体参考:https://www.cnblogs.com/jin-zhe/p/9523782. ...

  3. asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题

    刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...

  4. vue技术解析二之组件通信

    --------------------------动画效果----------------------------------- <transition name="router-f ...

  5. Vue(十五)组件

    一. 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码 组件是自定义元素(对象) 2. 定义组件 ...

  6. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

  7. vue 中scroll事件不触发问题

    在vue项目中需要监听滚动条滚动的位置,结果写了scroll监听事件就是不生效,最后查资料发现是页面有样式设置了over-flow:scroll,去掉之后完美解决.(页面样式中存在over-flow: ...

  8. Vue简单基础 + 实例 及 组件通信

    vue的双向绑定原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...

  9. Vue一个案例引发的动态组件与全局事件绑定总结

    最近在自学 Vue 也了解了一些基本用法,也记录了一些笔记有兴趣的朋友可以去查看我的其他文章,技术这东西真的不能光靠看,看是没有的,你必须要动手实践,只有在实战项目中才能发现问题,才能发现我们没有掌握 ...

随机推荐

  1. 带网上开户表单jQuery焦点图

    带网上开户表单jQuery焦点图是一款适合证券公司的带表单的图片左右滚动切换特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="ind ...

  2. C# if为false仍然进入方法体,==和qeual结果不一致

    场景: 代码: if( e.Key == Key.Tab) { // ... } 断点调试:结果为false,进入方法体   ??? 更改为: if(Key.Tab.Equals(e.key)) { ...

  3. [shell]shell 中| && || () {} 用法以及shell的逻辑与或非

    转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|".用法: command ...

  4. 【linux】——一个小程序

    利用工作之余为小伙伴写了份作业,关于进程间通信的.题目如下: 父进程从键盘上接受1000个数据,对其求和sum1,子进程对这1000个数平方和sum2,结果传给父进程,父进程将sum1+sum2后,打 ...

  5. 【C】——动态库中函数的作用范围

    如何生成动态库 net小伙 已经在此文中说明——[C]——如何生成静态库和动态库:接下来就要看看动态库中函数的作用范围: 首先我们使用命令   gcc -fPIC -shared -o libtest ...

  6. OpenResty最佳实践

    https://moonbingbing.gitbooks.io/openresty-best-practices/content/

  7. [hadoop读书笔记]前言

    hadoop2.0+主要变化: 全新的MapReduce 2,它建立在一个新的分布式资源管理系统之上,该系统称之为YARN. YARN:分布式资源管理系统

  8. Chrome 各版本下载集合

    Windows平台: Chrome 在线安装包: 最新稳定版(Stable Channel)Chrome在线安装: [点击这里] 最新测试版(Beta Channel)Chrome在线安装: [点击这 ...

  9. 关于DLNA

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00005587  概念 DLNA的全称是DIGITAL ...

  10. Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

    Opencv-Python:图像尺寸.图像的读取.显示.保存与复制 原创 2017年11月23日 21:30:49 4440 在使用opencv的方法时,首先必须导入opencv包.新的opencv导 ...