js实现缓动效果-让div运动起来

var tween = {
    linear:function(t,b,c,d){
        return c*t/d + b;
    },
    easeIn:function(t,b,c,d){
        return c * ( t /= d ) * t + b;
    },
    strongEaseIn:function(t,b,c,d){
        return c * ( t /= d ) * t * t * t * t + b;
    },
    strongEaseOut:function(t,b,c,d){
        return c * ( ( t = t / d -1 ) * t * t * t * t +1 ) + b;
    },
    sineaseIn:function(t,b,c,d){
        return c * ( t /= d ) * t * t + b;
    },
    sineaseOut:function(t,b,c,d){
        return c * ( ( t = t / d -1 ) * t * t *t +1 ) + b;
    }
};

var Animate = function(dom){
    this.dom = dom;
    this.startTime = 0;
    this.startPos = 0;
    this.endPos = 0;
    this.propertyName = null;
    this.easing = null;
    this.duration = null;
}

Animate.prototype.start = function(propertyName,endPos,duration,easing){
    this.startTime = +new Date;
    this.startPos = this.dom.getBoundingClientRect()[propertyName];
    this.propertyName = propertyName;
    this.endPos = endPos;
    this.duration = duration;
    this.easing = tween[easing];

    var self = this;
    var timeId = setInterval(function(){
        if(self.step() === false){
            clearInterval(timeId);
        }
    },19);
}

Animate.prototype.step = function(){
    var t = +new Date;
    if(t>=this.startTime + this.duration){
        this.update(this.endPos);
        return false;
    }
    var pos = this.easing(t-this.startTime, this.startPos, this.endPos - this.startPos, this.duration);
    this.update(pos);
}

Animate.prototype.update = function(pos){
    this.dom.style[this.propertyName] = pos + ‘px‘;
}

var div = document.getElementById(‘div‘);
var animate = new Animate(div);
animate.start(‘left‘,500,1000,‘strongEaseOut‘);
时间: 2024-10-29 10:46:15

js实现缓动效果-让div运动起来的相关文章

animation js控制 缓动效果

<!DOCTYPE html><html><head><meta charset="utf-8" /><title>缓动效果</title></head><body><div id="btn" style='position:absolute;'>按钮</div><script type="text/javascript"

镜头以及各种运动的缓动效果

如果使用物理学的匀加速(减速)运动,会发现实际效果显得迟缓,而且代码还很复杂,不如使用简单的“逐渐插值靠拢”的办法. 就是在每帧更新中,cur = lerp(cur, dst, factor) 其中 cur 是当前值,dst 是目的值,factor 则是一个很小的浮点数.这样插值的结果作为新的当前值,下一帧继续插值.实际产生的缓动效果比匀加速(减速)效果更好. 可以加入两个控制参数,以调节变化的速度. 一个是 lerpSpeed,用来生成上面的 factor: factor = lerpSpee

WPF中ListBox滚动时的缓动效果

原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时可以很流畅. 修改模板里的动画效果是一种方法,不过这里有更简单的,WPF为我们提供了行为代码,可以编辑在ListBox的ItemsPanelTemplate模板中,实现方法如下: 右键ListBox选择"编辑其它模板"->"辑项的布局"->"编辑副

易语言EXUI登录界面(附带缓动效果)源码

易语言EXUI登录界面(附带缓动效果)源码,调用了精易模块. 登录的时候有动效果,可以更换配色,按钮样式和背景图片,界面做的挺好看. 下载地址:https://6yunpan.pipipan.com/fs/17009107-357509637 原文地址:https://www.cnblogs.com/xiazai/p/10626497.html

window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果

window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求.这个方法接受一个函数为参,该函数会在重绘前调用. 注意: 如果想得到连贯的逐帧动画,函数中必须重新调用 requestAnimationFrame(). 如果你想做逐帧动画的时候,你应该用这个方法.这就要求你的动画函数执行会先于浏览器重绘动作.通常来说,被调用的频率是每秒60次,但是一般

利用tween.js算法生成缓动效果

在讲tween类之前,不得不提的是贝塞尔曲线了.首先,贝塞尔曲线是指依据四个位置任意的点坐标绘制出的一条光滑曲线.它在作图工具或动画中中运用得比较多,例如PS中的钢笔工具,firework中的画笔等等.无论运用在哪里,它们的原理都是一样的.同样,在用js实现运动效果时,我们也可以利用贝塞尔曲线来实现不同的特效,而tween.js就是一个封装好的计算辅助算法.你可以通过连续输入多个值,然后利用贝塞尔曲线公式输出不同的值,最终形成了一条光滑的曲线.因为一条曲线上的值的不一样的,所以我们可以利用曲线的

JS特效@缓动框架封装及应用

| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.变量CSS样式属性获取/赋值方法 给属性赋值:(既能获取又能赋值) 1)div.style.width 单个赋值:点语法,这个方法比较固定,不能用变量或者字符串的形式更换属性,不方便我们传值获取属性,和给属性赋值. 2)div.style["width"] 变量赋值:中括号形式,传入字符串.可以通过传字符串或者变量的方式获取和赋值属性.缺点:只能是对行内式CSS来操作的.赋值的时候毫无问题.但是,获取值的时候有问题了. 二.

【FairyGUI &amp; Unity】使用动效功能实现血条UI扣血与加血的缓动效果

原理 血条使用进度条组件,可以得到当前值与最大值. 通过动效-改变缩放可以让图片宽度从1到0按百分比变化. 动效可以指定播放动效的时间范围 组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 发布到Unity. 参考代码 if (hpValue < hpBar.value) // HP降低 { hpBar.DownBar.SetScale((flo

原生js实现缓动返回顶部

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ padding: 0; margin: 0; } #box{ width: 1366px; height: 2000px; position: absolute; background-color