js原生实现链式动画效果
// 1. css样式
div {
width: 100px;
height: 100px;
background: olivedrab;
position: absolute;
left: 0px;
opacity: 1;
}
.top {
top: 100px;
}
.bottom {
top: 300px;
}
// html和JavaScript代码 <div class="top"></div>
<div class="bottom" style="background-color: coral;"></div> <script>
// 多物体多值链式运动框架 // 获取对象样式相对应属性的值
var targetObj = {
width: 400,
height: 400,
opacity: 50,
left: 300,
top: 200
}
// 获取对应的HTML元素
oDivArray = document.getElementsByTagName('div');
// 调用函数
oDivArray[0].onclick = function() {
startMove(this, targetObj, function() {
startMove(oDivArray[1], targetObj);
});
}
// 获取元素样式对应的属性值
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return window.getComputedStyle(obj, false)[attr];
}
} // 封装动画函数
function startMove(obj, json, callback) {
// 清除目标对象的定时器,而非全局
clearInterval(obj, timer);
// iSpeed:动画速度,iCur:当前样式属性的值,timer:定时器对象
var iSpeed, iCur, timer;
obj.timer = setInterval(function() {
var bStop = true; // 标志位,上一个对象的动画是否完成
for (var attr in json) {
if (attr === 'opacity') { // 如果获取的是opacity,则乘100倍,否则正常获取值
iCur = parseFloat(getStyle(obj, attr)) * 100;
} else {
iCur = parseInt(getStyle(obj, attr));
}
iSpeed = (json[attr] - iCur) / 7;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); //设置动画速度
if (attr == 'opacity') {
obj.style.opacity = (iCur + iSpeed) / 100; // 乘100的值还原回去
} else {
obj.style[attr] = iCur + iSpeed + 'px';
}
if (iCur != json[attr]) { // 如果当前属性的值不等于用户穿进来的对象里的属性对应的值,则继续执行动画
bStop = false;
} else { // 达到期待的目标,设置标志位为真,即可以停止
bStop = true;
}
}
if (bStop) {
clearInterval(obj.timer); //如果标志位为真,则达到用户期待的动画效果
typeof callback == 'function' ? callback() : '';// 判断用户是否有传入回调函数,有则执行,无则结束。链式动画执行框架
}
}, 30)
}
</script>
end
js原生实现链式动画效果的更多相关文章
- js原生设计模式——2面向对象编程之js原生的链式调用
技巧点:对象方法中返回当前对象就可以链式调用了,即方法中写return this; <!DOCTYPE html><html lang="en"><h ...
- js原生实现轮播图效果(面向对象编程)
面向对象编程js原生实现轮播图效果 1.先看效果图 2.需要实现的功能: 自动轮播 点击左右箭头按钮无缝轮播 点击数字按钮切换图片 分析:如何实现无缝轮播? 在一个固定大小的相框里有一个ul标签,其长 ...
- PHP中的__toString方法(实现JS里的链式操作)
_toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...
- js简单实现链式调用
链式调用实现原理:对象中的方法执行后返回对象自身即可以实现链式操作.说白了就是每一次调用方法返回的是同一个对象才可以链式调用. js简单实现链式调用demo Object.prototype.show ...
- 使用two.js生成的卫星环绕动画效果
来源:GBin1.com two.js是一个帮助你实现绘图和动画效果的类库,同时支持三种前端绘图实现: webgl svg 2d画布 使用这个类库,可以方便的支持这三种不同的实现,你只需要设置参数:T ...
- JS实现回到页面顶部动画效果 2016.03.23
最近在模仿各大网站写页面样式和交互,发现好多都有回到顶部的需要,所以写了一下js,记录下来. 发现还可以添加从快到慢的动画效果和随时下拉滚动条停止滚动的功能, 参考了imooc上相关课程,最终实现JS ...
- h5+js随机拖动鼠标产生动画效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- d3.js制作蜂巢图表带动画效果
以上是效果图,本图表使用d3.js v4制作.图表主要功能是在六边形格子中显示数据,点击底部图标可以切换指定格子高亮显示,图表可以随浏览器任意缩放. 1.图表的主体结构是由正六边形组成,使用d3生成六 ...
- js实现jquery函数animate动画效果
<script> function animate(obj, json, interval, sp, fn) { clearInterval(obj.timer); function ge ...
随机推荐
- PHP读取Excel内的图片
今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下. 这里介绍一下分别使用phpspr ...
- Asciinema文章勘误及Web端使用介绍
欠下的债迟早是要还的,查文档,重验证,出结果,不误导 文章勘误 在上一篇文章Asciinema:你的所有操作都将被录制中有两个地方表述有错误或瑕疵,这里更正一下 第一个地方为录制时的参数--stdin ...
- try-with-resources优先于try-finally
参考资料:<Effective Java>.<Java核心技术 卷1>.https://www.cnblogs.com/flyingeagle/articles/1015292 ...
- 回声消除中的LMS和NLMS算法与MATLAB实现
自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...
- linux内核的tiny rcu, tree rcu
kernel中有两个rcu的实现,一个是tiny rcu,另一个是tree rcu.这两种rcu的前身都是classic rcu.如果要阅读classic rcu的实现代码,必须找kernel 2.6 ...
- 使用CGLIB实现动态代理
参考:https://blog.csdn.net/yhl_jxy/article/details/80633194#comments CGLIB动态代理 定义:CGLIB(code genaratio ...
- [Part 1] Ubuntu 16.04安装和配置QT5 | Part-1: Install and Configure Qt5 on Ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/91842b71/,欢迎阅读! Part-1: Install and Configure Qt5 on Ubuntu 16.04 ...
- 如何利用快照( snapshot )功能快速定位性能问题
我们常常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,但是测试人员搭建环境后又没办法复现故障,最后导致问题没法解决,眼睁睁地看着用户流失. 这是因为线上生产环境非常复杂.很多时候是偶发性 ...
- 如何搭建Docker私有仓库
私有仓库 有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用. 本节介绍如何使用本地仓库. docker-registry 是官方提供的工具,可以用于构建私 ...
- 【Android - 控件】之V - Toolbar的使用
Toolbar是Android V7包中的一个控件,用来代替Action Bar作为界面的头部标题栏布局.Toolbar相对于Action Bar的特点是更加灵活,可以显示在任何位置. 首先先来看To ...