vue项目tween方法实现返回顶部的示例代码


Posted in Javascript onMarch 02, 2018

一、场景

tween.js是一款可生成平滑动画效果的js动画库

当你要实现一个返回顶部的功能时候你会怎么做,大部分人会使用document.body.scrollTop =0;这么写就实现了功能,

不过要更加的细腻一点我们不妨用tween的缓动来实现,看看效果如何吧。

之前我们写过tween的相关文章,这里不做介绍了。

二、代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <style type="text/css">
      #app{width: 100%; height: 3000px;background: #CCCCCC;}
      .backTop{
        width: 1.5rem;
        height: 1.5rem;
        border: 1px solid #ff0000;
        position: fixed;
        right: 1rem;
        bottom: 2rem;
        border-radius: 50%;
        /*background: url(/static/imgs/backtop20180226.png) no-repeat 40%;*/
        background-size: 70% 100%;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <div @click="backTop()" class="backTop">Top</div>
    </div>
    
    <script type="text/javascript">
      var app = new Vue({
        el:"#app",
        data:{
          
        },
        methods:{
          backTop(){
//             * t: current time(当前时间);
//             * b: beginning value(初始值);
//             * c: change in value(变化量);
//             * d: duration(持续时间)。
            var Tween = {
              Linear: function(t, b, c, d) { //匀速运动,想要实现其他的效果可以使用tween的其他方法
                return c * t / d + b; 
              }
            }
            Math.tween = Tween;
            var t = 1;
            const b = document.documentElement.scrollTop;
            const c = 50;
            const d = 5;
            const setInt = setInterval(()=>{
              t--;
              console.log(t)
              if(document.documentElement.scrollTop == 0){clearInterval(setInt)}
              console.log(t);
              const backTop = Tween.Linear(t,b,c,d);
               console.log(backTop);
              document.documentElement.scrollTop = backTop;
            },20)
          }
        }
      })
    </script>
  </body>
</html>

三、requestAnimationFrame改写setInterval方法:

methods:{
      backTop(){
        var Tween = {
          Linear: function(t, b, c, d) { //匀速
            return c * t / d + b; 
          }
        }
        Math.tween = Tween;
        var t = 1;
        const b = document.body.scrollTop;
        const c = 1;
        const d = 1;
        var timer;
        timer= requestAnimationFrame(function fn(){
          if(document.body.scrollTop > 0){
            t--;
            console.log(t)
            console.log(t);
            const backTop = Tween.Linear(t,b,c,d);
             console.log(backTop);
            document.body.scrollTop = backTop;
            timer = requestAnimationFrame(fn);
          }else{
            cancelAnimationFrame(timer)
          }
        })
      }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js正确获取元素样式详解
Aug 07 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
通过一次报错详细谈谈Point事件
May 17 Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
Aug 04 Javascript
微信小程序转发事件实现解析
Oct 22 Javascript
Javascript异步编程async实现过程详解
Apr 02 Javascript
Vue2.0系列之过滤器的使用
Mar 01 #Javascript
浅谈Vue Element中Select下拉框选取值的问题
Mar 01 #Javascript
vue.js 获取select中的value实例
Mar 01 #Javascript
Vue中的slot使用插槽分发内容的方法
Mar 01 #Javascript
在vue中封装可复用的组件方法
Mar 01 #Javascript
JavaScript判断日期时间差的实例代码
Mar 01 #Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 #Javascript
You might like
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
潜说js对象和数组
2011/05/25 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue3.0 上手体验
2020/09/21 Javascript
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python扩展内置类型详解
2018/03/26 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
基于python实现操作git过程代码解析
2020/07/27 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
编辑找工作求职信范文
2013/12/16 职场文书
2014新年寄语
2014/01/20 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
员工年终自我评价
2014/09/14 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
2014年销售工作总结
2014/12/01 职场文书
爱心募捐感谢信
2015/01/22 职场文书
爱国主义影片观后感
2015/06/18 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS