zoukankan      html  css  js  c++  java
  • vue2.0 监听滚动 锚点定位

    vue中监听滚动的方法其实可以用:

    // Chrome  
    document.body.scrollTop  
    // Firefox  
    document.documentElement.scrollTop  
    // Safari  
    window.pageYOffset 

     :scrollTop(滚动之根本),document.body.scrollTop的值来实现滚动,但是后来逐渐发现很邪门,

    有时给其赋值并没有作用,就是不能监听滚动后来知道

      mounted() {
        this.$nextTick(function() {
          let _this = this;
          window.addEventListener("scroll", this.onScroll);
        });
      },

    window.addEventListener 来监听页面的滚动 ,然后在结合(如果没有啥特殊的效果推荐用) 

    直接用 <a href="#id"> 是最简单粗暴的办法

    最后不甘心用这个 href 然后就用了 ref 这个属性来获取;

     mounted() {
        this.$nextTick(function() {
          let _this = this;
          _this.$refs.app.scrollTop = 0;
          _this.height = _this.$refs.app.offsetHeight;
          _this.$refs.app.addEventListener("scroll", _this.onScroll, true);
          //window.addEventListener("scroll", this.onScroll);
        });
      },

    然后在div 

       <a href="javascript:;"  data-num="1" :class="num==1?'selected':'unselected'" @click="changeTab(1)">活动规则</a>
       <a href="javascript:;" data-num="2" :class="num==2?'selected':'unselected'"  @click="changeTab(2)">活动介绍</a>
     changeTab(num) {
          const vm = this;
          let otherTop = vm.$refs.other.offsetTop;
          vm.num = num;
          let scrollTop = 0;
          switch (num) {
            case 1:
              vm.position = false;
              scrollTop = 0;
              break;
            case 2:
              vm.position = true;
              scrollTop = vm.headerH;
              break;
            case 3:
              vm.position = true;
              scrollTop = otherTop;
              break;
          }
          console.log(scrollTop);
          setTimeout(() => {
            vm.$refs.app.scrollTop = scrollTop;
          }, 100);
        },

    如果 你就得这样不够平滑,可以 用每一小段一小段的跳,这样会导致视觉上是一个平滑的效果,

    而不是我点击了就突然scrollTop就突然下去或者上来,避免了很突兀的感觉。

    //    平滑滚动,时长500ms,每10ms一跳,共50跳
    let step = total / 50 >> 0

     这样 就可以实现 锚点 和监听滚动了 ,当然你可以在页面跳转走后销毁 ,这样体验更好

    destroyed() {
        window.removeEventListener("scroll", this.onScroll);
      }

      

  • 相关阅读:
    mysql之指定为definer的用户不存在
    Hibernate报错:org.hibernate.ObjectNotFoundException: No row with the given identifier exists 解决办法
    MongoDB mongo.exe启动及闪退解决 转载
    pycharm下运行unittest的问题
    mysql大小写敏感与校对规则
    windows7环境下使用pip安装MySQLdb
    HTML中title前面小图标和网站收藏现实的图标
    异步发送的请求---取消操作
    视频文件上传遇到的问题
    vue-devtools 必备开发工具
  • 原文地址:https://www.cnblogs.com/yf-html/p/9230417.html
Copyright © 2011-2022 走看看