热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue填坑之回到顶部:

vue来实现回到顶部代码(参考慕课网):<div@clickgoTopv-showtoTop><imgsrc&quo

vue来实现回到顶部代码(参考慕课网):

    



   let stop = false;                                   // 全局变量,坑处
  let timer = null;// 全局变量,坑处
  mounted() {      this.$nextTick(function () {         window.addEventListener('scroll', this.needToTop);  //滚动事件监听      });    },    methods: {      goTop: function() {// 回到顶部方法        clearInterval(timer);        timer = setInterval(function() {
    console.log('不妙');            let curHeight = document.documentElement.scrollTop || document.body.scrollTop;  // 得到当前高度            var now = curHeight;            var speed = (0 - now) / 7;// 随着高度减速            speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
        console.log(`当前的高度应该是:` + curHeight);
    console.log('我是零你也那我没办法');            if (curHeight === 0) {//当前高度为零,停止这次计时器              clearInterval(timer);  // C1            }            document.documentElement.scrollTop = curHeight + speed;//直接给高度赋值,会调用needtotop方法            document.body.scrollTop = curHeight + speed;//谷歌的            stop = false;// A    console.log('回到顶部一次'); 
       }, 30);      },      needToTop: function() {        let curHeight = document.documentElement.scrollTop || document.body.scrollTop;        let viewHeight = document.documentElement.clientHeight;        if (curHeight > viewHeight + 100) {          this.toTop = true;                         //赋值是为了按钮的v-show='toTop'        }        else        {          this.toTop = false;        }        if (stop) {//STOP          clearInterval(timer);//C2
  console.log('我没了');        }        stop = true;//B
        console.log('执行了一次');      }    }
从点击回到顶部开始,正常的执行顺序:

ABABABABABABAB......C1

如果在途中先停下来:

ABAB.....AB.....(此时stop为true,但是你突然动了滚条,-->)............STOP.........C2



好,我们逐一地把timer和stop内化成vue组件里的data:

    data() {
return {
dataTimer: null
};
},
把方法里的所有的timer改成this.dataTimer;

结果即使到了最顶端,竟然还会出现:



这是为什么????这是为什么????这是为什么????这是为什么????这是为什么????这是为什么????



我们接着把stop内化成vue组件里的data

    data() {
return {
 dataStop: false
};
},


再把以上代码的stop全部换成dataStop,

问题更严重了:直接只滚动了一次



居然只执行了一次?????,



填坑:然后我在watch里面观察了这个stop,结果是,没有执行回调函数:

    watch: {
dataStop: {
handler: function() {
console.log('我变了' + this.dataStop);
}
}



结论:

在计时器触发的时候,datastop应该是true的,当计时器又去执行滚动条监听事件的时候,虽然在执行之前已经改了this.datastop为false,但是vue里我们 并没有真正的改变过datastop,整个生命周期就是:vue方法调用vue方法,直到vue方法跑完,datastop都没有改动过




推荐阅读
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • WPF开发心率检测大数据曲线图的高性能实现方法
    本文介绍了在WPF开发中实现心率检测大数据曲线图的高性能方法。作者尝试过使用Canvas和第三方开源库,但性能和功能都不理想。最终作者选择使用DrawingVisual对象,并结合局部显示的方式实现了自己想要的效果。文章详细介绍了实现思路和具体代码,对于不熟悉DrawingVisual的读者可以去微软官网了解更多细节。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文讨论了在Vue组件中,为什么data属性要返回一个函数的问题。通过示例代码,说明了对象变量和对象函数在数据更改前后的影响。 ... [详细]
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
mobiledu2502874965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有