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 相关文章推荐
cument.execCommand()用法深入理解
Dec 04 Javascript
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 Javascript
微信公众号 摇一摇周边功能开发
Dec 08 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
vue实现页面加载动画效果
Sep 19 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
原生JS中应该禁止出现的写法
May 05 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
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
如何提高数据访问速度
2016/12/26 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
python time模块用法实例详解
2014/09/11 Python
Python itertools模块详解
2015/05/09 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python查看微信好友是否删除自己
2016/12/19 Python
对Python3中的input函数详解
2018/04/22 Python
详解python中*号的用法
2019/10/21 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
函授药学自我鉴定
2014/02/07 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python