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代码实现自适应
Feb 24 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
Feb 28 Javascript
JS变量及其作用域
Mar 29 Javascript
vue.js源代码core scedule.js学习笔记
Jul 03 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
vuex学习之Actions的用法详解
Aug 29 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
JS sort排序详细使用方法示例解析
Sep 27 Javascript
vue脚手架项目创建步骤详解
Mar 02 Vue.js
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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php基础知识:类与对象(1)
2006/12/13 PHP
php入门教程 精简版
2009/12/13 PHP
解析php中反射的应用
2013/06/18 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
JavaScript中的some()方法使用详解
2015/06/09 Javascript
javascript运动详解
2015/07/06 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python Series从0开始索引的方法
2018/11/06 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
浅析python redis的连接及相关操作
2019/11/07 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
极简的HTML5模版
2015/07/09 HTML / CSS
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
办公室内勤工作职责
2013/12/11 职场文书
献爱心倡议书
2014/04/14 职场文书
买卖协议书范本
2014/04/21 职场文书
村道德模范事迹材料
2014/08/28 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
2014年教研工作总结
2014/12/06 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
Nginx配置之禁止指定IP访问
2022/05/02 Servers