两个动画函数的分析

写了两个回到顶部的函数

一个是这样的:

function fanhui(){
        var dist;
        var timer;
        var flag=true;
        var up_btn=document.getElementById("up_btn");
        var clientHeight=document.documentElement.clientHeight;
        window.onscroll=function(){

            var height=document.documentElement.scrollTop||document.body.scrollTop;
            if(height>=clientHeight){
                up_btn.style.display="block";
            }else{
                up_btn.style.display="none";
            }
            if(flag==false){
                clearTimeout(timer);
            }
            flag=false;

        }
        up_btn.onclick=function(){
            moveElement(30);
        }
        function moveElement(interval){
            var height=document.documentElement.scrollTop||document.body.scrollTop;
            dist=Math.ceil(height/10);
            console.log(dist);
            document.documentElement.scrollTop=document.body.scrollTop-=dist;
            if((document.documentElement.scrollTop>0)||(document.body.scrollTop>0)){
                timer=setTimeout(function(){
                   moveElement(interval);
                },interval);
            }else{
                clearTimeout(timer);
            }
            flag=true;
        }
    }
    fanhui()

另外一个是这样的

 function fanhui(){
            var btn=document.getElementById("up_btn");
            var timer=null;
            var flag=true;
            var clientHeight=document.documentElement.clientHeight;

            window.onscroll=function(){ 

               var height= document.documentElement.scrollTop||document.body.scrollTop;
               if(height>=clientHeight){
                    btn.style.display="block";
                }else{
                    btn.style.display="none";
                }
               if(flag==false){

                    clearInterval(timer);

                }
                flag=false;
            }
            btn.onclick=function(){
                timer=setInterval(function(){
                    var height= document.documentElement.scrollTop||document.body.scrollTop;
                    var ispeed=Math.ceil(height/10);

                    console.log(ispeed); document.documentElement.scrollTop=document.body.scrollTop-=ispeed;

                    flag=true;
                    if(height==0){
                        clearInterval(timer);
                    }
                },30)
            }

        }
        fanhui();
 })

其中,想要的结果为,首先能够实现回到顶部的效果,而且是在距离顶部的距离越小的情况下,其移动的速度越慢。其次,其能够实现在向上滑动的过程中,若移动滚轮将会结束滑动的效果。

Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数。

第二个滑动函数:主要是设置了一个setInterval函数让其能够每隔30毫秒执行一次,每次获取滚动的高度,然后取其高度的十分之一作为每次向上滑动的距离,当高度为0的时候,清除setInterval函数。我们在控制台输出speed可以看出每次speed的变化。

第一个滑动函数,是进行了递归调用,首先获取滚动条滚动的高度,然后判断高度,如果height>0,那么30毫秒后执行滑动函数,如此循环,直到height为0的时候跳出该函数,递归结束。需要注意的是递归调用的函数不要忘记传递参数。

实践证明这两个函数的执行效果是一样的。

时间: 2024-08-19 21:38:31

两个动画函数的分析的相关文章

开源学习--SlideExpandableListView中的列表项动画实现框架分析

前面的话 开源项目Android-SlideExpandableListView是一个简单的介绍列表项动画展示的小型项目,分析这个项目可以对自定义框架及列表类动画实现有个比较清晰的认识,工作中中时常根据需求扩展定义自己的适配器,虽然具体需求不同,但架构类似,本文把最近关于该开源项目的研究心得整理分享,共同学习~ 项目简介 github地址https://github.com/tjerkw/Android-SlideExpandableListView 这是个入门级的列表项动画展示框架,实现效果如

JS里面的两种运动函数

最新学了一个新的运动函数,与最初学习的有所不同,第一个运动是根据运动速度完成运动 ,第二个则是根据运动的时间来完成运动,而且把之前的函数都进行了一些兼容处理,在这里列出了看一下: 第一种animate1 1 function animate1(obj,data,rate,fn){//运动对象,运动数据,[运动速度],[回调函数] 2 //遍历获取样式属性 3 for(var key in data){ 4 //通过闭包将key私有化 5 (function(k){ 6 /* 7 获得样式宽高等会

iOS开发笔记7:Text、UI交互细节、两个动画效果等

Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中遇到的一些细节问题,包括Masonry部分的问题. 动画介绍最近用到的两个,算是常用级别的,动画这部分之后会专门研究总结下. 最后介绍两个工具及三个Xcode使用设置的问题. 1.Text (1)UILabel显示多行文字并且文字置顶显示 不限制UILabel的高度(宽度需要设置,确定文字何时换行)

(转)x264源码分析(1):main、parse、encode、x264_encoder_open函数代码分析

转自:http://nkwavelet.blog.163.com/blog/static/2277560382013103010312144/ x264版本:   x264-snapshot-20140226-2245  1.     首先对主函数进行分析,main函数很简洁,主要有三个步骤,见下图: 2.   接下来分析一下Parse函数中的主要过程: static int parse( int argc, char **argv, x264_param_t *param, cli_opt_t

大数据学习之Scala中main函数的分析以及基本规则(2)

一.main函数的分析 首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下.有助于后面的学习 object HelloScala { def main(args: Array[String]): Unit = { println("I Love You Scala"); } } 如图所看到的,在Scala中能够使用object和class分别定义一个类.两者还是存在一些区别.以后我会在专门的博客中给予介绍. 在Scala中定义一个函数使用:def 来修饰 完整定义一个函数为

Qt程序启动画面播放(gif与swf两种动画格式)

学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找不到好的书籍或文章可以马上学习.上手. 今天,就把前段时间对启动画面播放的学习及尝试做一个小小的总结.如果对大家有所帮助,那自然好:如果有什么不足或有什么可以改进的地方,还望朋友们多给点意见及建议,谢谢! 过程很简单,只是建立了一个基于Qt控制台的项目,文件也只有一个——"main.cpp"

从零开始学 Web 之 BOM(三)offset,scroll,变速动画函数

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.直接使用 do

JavaScript——WEBAPIS_深入动画函数的封装,常见网页特效

深入动画函数的封装 1.动画函数的封装 1.1 缓动效果的实现 这里有一些核心的算法,(目标值 - 现在的位置) ??/??10 = 每一次移动的步长 拿一个具体的效果举例子,比如让一个元素慢下来, 实现想法:让元素的移动距离变下,每一次的步长都变小,核心的算法:** (目标值 - 现在的位置) ??/??10??? 做为每次移动的距离步长**,其停止的条件就是当盒子到达目标位置就停止定时器 实现的代码: <body> <button>点击之后老李才飞!</button>

js-特效部分学习-offsetParent、scrollHeight 、动画函数的封装

1. offsetParent  获取的最近的定位的父元素   offsetLeft/offsetTop  是相对于offsetParent的距离 offsetHeight/offsetWidth 获取盒子的大小   border + height + padding <style> #box { width: 200px; height: 200px; background-color: #ff0000; } #child { width: 100px; height: 100px; mar