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 相关文章推荐
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 Javascript
js中日期的加减法
May 06 Javascript
jQuery查找节点并获取节点属性的方法
Sep 09 Javascript
setTimeout学习小结
Feb 08 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
Nov 08 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
Mar 14 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
Sep 03 Javascript
简单了解JavaScript sort方法
Nov 25 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
PHP 动态随机生成验证码类代码
2010/04/09 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
浅析Python中的for 循环
2016/06/09 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
基于Python log 的正确打开方式
2018/04/28 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
人事专员职责
2014/02/22 职场文书
销售提升方案
2014/06/07 职场文书
安全标语大全
2014/06/10 职场文书
董事长秘书工作职责
2014/06/10 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
幼师大班个人总结
2015/02/13 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
python数字类型和占位符详情
2022/03/13 Python