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 相关文章推荐
面向对象的javascript(笔记)
Oct 06 Javascript
jQuery validate 中文API 附validate.js中文api手册
Jul 31 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
Apr 27 Javascript
16个最流行的JavaScript框架[推荐]
May 29 Javascript
jquery插件开发注意事项小结
Jun 04 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
webpack4.x下babel的安装、配置及使用详解
Mar 07 Javascript
JS删除String里某个字符的方法
Jan 06 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
咖啡语言
2021/03/03 咖啡文化
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
详解PHP中的PDO类
2015/07/06 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
input框中的name和id的区别
2016/11/16 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
年度献血先进个人事迹材料
2014/02/14 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android