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);
      }

      

  • 相关阅读:
    AngularJS 1.x系列:AngularJS过滤器(4)
    AngularJS 1.x系列:AngularJS控制器(3)
    AngularJS 1.x系列:AngularJS简介及第一个应用(2)
    AngularJS 1.x系列:Node.js安装及npm常用命令(1)
    MySQL系列:索引基本操作(4)
    基于 Mathematica 的机器人仿真环境(机械臂篇)[转]
    使用耳切法将多边形三角化【转】
    asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。【转】
    ASP.NET与非托管DLL的那些事儿【转+增】
    cesium常用设置【转】
  • 原文地址:https://www.cnblogs.com/yf-html/p/9230417.html
Copyright © 2011-2022 走看看