回到顶部继承版

作者: icessun | 来源:发表于2017-07-06 23:05 被阅读7次

面向对象的三大小技巧:

  • this永远是实例,所有的操作都是给this添加属性和方法
  • 全局变量都是实例的私有属性
  • 不要函数嵌套函数,全局的函数都是原型上面公有的方法,实例调用
    回调:把函数的定义阶段作为普通参数传递,回调函数中的this指向window,
    箭头函数中的this指向父级
    引用一个类,使用的时候要创建一个实例对象
    继承父类身上的属性和方法
    给元素身上绑定事件:on('事件名',callback回调函数),绑定多个事件都可以执行,只要触发了事件的执行,解除绑定事件:off('事件名',有名的函数名)
    事件的绑定都是异步的

创建父类BaseToTop 回到顶部

class BaseToTop{
// 构造函数才参数传在constructor上面
       constructor(opt){
             // 要是忘记传入opt对象的时候
            opt=opt||{};
              this.ele=opt.ele;
               this.timer=null;
              this.step=null;
             this.bOk=false; // 随时停下的状态判断,Boolean值
              this.duration=opt.duration || 1000;
                this.clickEvent();   // 点击事件,回到顶部
     }
   clickEvent(){
// 给元素身上绑定点击事件
           this.ele.on('click',()=>{
                 // 计算步长
                var target=$(window).scrollTop();
                 var duration=this.duration;
                 var interval=30;
                this.step=target/duration*interval;
                 // 使用this之前一定要提醒自己this是什么
                 this.timer=setInterval(()=>{
                         // 移动到顶部 最好不要函数嵌套函数  定时器里面
                       this.moveTop();
                   },interval);
             })
     }
       moveTop(){
                // 每次获取到最新的位置
                var curTop=$(window).scrollTop();
               // 最新的位置上面减去step
                    curTop-=this.step; // 这个this是谁取决你函数调用的时候this是谁
          if(curTop<=0){
                   $(window).scrollTop(0); // 设置为0
                   clearInterval(this.timer); // 关闭定时器
                    this.scrollEvent&&this.scrollEvent(); // 再次滚动的时候出现回到顶部的按钮
                  return; // 阻止程序执行
           }
               // 重新赋值最新的位置
              $(window).scrollTop(curTop);
              this.bOk=false; // 点击了按钮设置Boolean值为false
          }
 }

创建一个子类继承父类,回到顶部按钮开始隐藏,超过一屏显示

class ShowOrHide extends BaseToTop{
   //  要继承需要传入参数 opt  先继承父类原有的 父类如果有参数,就必须写参数
         constrouctor(opt){
               super(opt);
this.name=null;
 this.scrollEvent();
      }
// 超过一屏才显示按钮
    scrollEvent(){
// 绑定事件,方便解除
           $(window).on('scroll',this.name=()=>{
                    
                     // 超过一屏显示
if($(window).scrollTop()>$(window).height){
                      this.ele.show();
                }else{
                           this.ele.hide();
                   }
              })
       }
}

创建子类继承父类,按钮点击后立即隐藏

class quickHide extends ShowOrHide{
// 父类有参数,子类继承父类就要有参数
       constructor(opt){
            super(opt);
            this.btnHide();
      }
    
      btnHide(){
             this.ele.on('click',()=>{
                       this.ele.hide(); // 当前按钮隐藏
                       $(window).off('scroll',this.name); // 解除scroll事件的绑定
            }) 
      }
  }

空白处点击随时停下不滚动

class stopAnytime extends ShowOrHide{
        constructor(opt){
               super(opt);
this.stop();
       }   
stop(){
// 给scroll添加事件:对bOk的判断;在定时器里面设置bok为false
       $(window).on('scroll',()=>{
                if(this.bOk) clearInterval(this.timer); // 关闭定时器就是停止滚动
                 this.bOk=true;
     })   
 }
   }

创建实例

// 基础版的回到顶部
  var toTop=new BaseToTop({
              ele:$('a'),
              duration:700 
   })
// 按钮回到顶部隐藏,滚动显示
var toTop2=new ShowOrHide({
              ele:$('a'),
              duration:700 
   })
// 按钮点击立马隐藏
var toTop3=new quickHide({
              ele:$('a'),
              duration:700 
   })
// 随时隐藏
var toTop4=new stopAnytime({
              ele:$('a'),
              duration:700 
   })

HTML代码

 <style>
        body,html{
            width:100%;
            height:300%;
            background: -webkit-linear-gradient(top,lightpink,lightgreen,lightblue,darkolivegreen);
        }
        a{
            width: 80px;
            height: 80px;
            border-radius: 40px;
            background: darkgreen;
            color: white;
            font-size: 20px;
            text-align: center;
            line-height: 80px;
            position: fixed;
            right:20px;
            bottom:30px;
            text-decoration:none;
            display: block;
        }
        #btn2{
            left:30px;
            bottom:30px;
            background: red;
        }
    </style>
</head>
<body>
<a href="javascript:;" id="btn">toTop</a>
<script src="js/jquery.js"></script>
<script src="js/ToTop.js"></script>
<script>
    var toTop=new QuicklyStop({
        ele:$('#btn'),
        duration:700
    });
</script>
</body>
</html>

相关文章

  • 回到顶部继承版

    面向对象的三大小技巧:this永远是实例,所有的操作都是给this添加属性和方法全局变量都是实例的私有属性不要函数...

  • 回到顶部(封装版)

    js部分

  • 回到顶部(简单版)

    回到顶部 ![Upload Paste_Image.png failed. Please try again.]

  • 第九周第一天笔记之toTop回到顶部实例

    1 回到顶部es6版面向对象+原生JS实例 代码:HTML代码: ...

  • js 返回页面顶部(动画)

    js 返回到页面顶部,含有渐变或者动画效果 点击返回顶部按钮,页面逐渐向上回到顶部: js 返回到页面顶部,直接返...

  • 回到顶部

    经过百度与stackoverflow4年前还有很多quirks模式的时候 原因是这样的 Firefox & IE...

  • 回到顶部

    首先来下简易的css和html布局 其中图片: 接下来js 这个时候我们console.log(ispeed),发...

  • 回到顶部

  • 回到顶部

    首先提到回到顶部我们就想到的是a标签锚点跳转 a标签返回顶部的话会产生改变路由的问题每次用户点击返回顶部的话是可以...

  • 回到顶部

网友评论

    本文标题:回到顶部继承版

    本文链接:https://www.haomeiwen.com/subject/saykhxtx.html