适用于CSS2的各种运动的javascript运动框架
<script>
window.onload = function() {
//var oDiv1 = document.getElementById('box1');
//var oDiv2 = document.getElementById('box2');
// oDiv1.timer = null;
var oDiv = document.getElementsByTagName('div'); for (var i = 0; i < oDiv.length; i++) {
oDiv[i].timer = null;
oDiv[i].onmouseover = function() {
var that = this; //闭包的关系,把this传递过去
startMove(this, {'width': 205, 'height': 500},function(){
startMove(that, {'opacity': 100});
});
//alert(getStyle(this,'opacity'))
}
oDiv[i].onmouseout = function() {
var that = this;
startMove(this, {'width': 200,'height':200}, function(){
startMove(that, {'opacity': 30});
});
}
}
}
//var timer = null;
function getStyle(obj,name){ //获取样式的函数
if(obj.currentStyle){
return obj.currentStyle[name]; //这里用这种形式的原因是name是以字符串的形式传递过来的
} else{
return getComputedStyle(obj,false)[name]; //得到加上边框的总宽
}
}
//startMove(onj,{width: 200, height: 200}, fnEnd)
function startMove(obj, json, fnEnd) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true; //开了定时器之后设立一个假设:所有运动都停止了,那些把假设设到定时器外面的都是错误的方法
for(var attr in json){
var cur = 0;
if(attr == "opacity"){
cur = Math.round(parseFloat(getStyle(obj,attr)) * 100); //要取整
} else {
cur = parseInt(getStyle(obj,attr))
}
var speed = (json[attr] - cur) / 10; //
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (cur !== json[attr]) { //如果某次循环的值不等于目标值,
bStop = false; //假设不成立
};
if (attr == "opacity"){
obj.style.opacity = (speed + cur)/100;
obj.style.filter = 'alpha(opacity:'+ (speed + cur) +')';
} else{
obj.style[attr] = cur + speed + 'px';
}
}
if(bStop){ //所有的假设都成立了,才关闭定时器
clearInterval(obj.timer);
if(fnEnd) fnEnd(); //如果有回调函数,则执行回掉函数
}
}, 30)
}
</script>
html代码
<div id="box1"></div>
<div id="box2"></div>
css代码
div {
width: 200px;
height: 200px;
background: purple;
border: 10px solid maroon;
margin-top: 10px;
opacity: 0.3;
filter: alpha(opacity: 30);
}
全手打,亲测可用,支持多物体,多属性,链式,同时运动。
适用于CSS2的各种运动的javascript运动框架的更多相关文章
- 原生JavaScript运动功能系列(五):定时定点运动
原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 原生JavaS ...
- 原生JavaScript运动功能系列(四):多物体多值链式运动
原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 多物体多值链式 ...
- javascript运动系列第一篇——匀速运动
× 目录 [1]简单运动 [2]定时器管理 [3]分享到效果[4]移入移出[5]运动函数[6]透明度[7]多值[8]多物体[9]回调[10]函数完善[11]最终函数 前面的话 除了拖拽以外,运动也是j ...
- javascript运动系列第二篇——变速运动
× 目录 [1]准备工作 [2]加速运动 [3]重力运动[4]减速运动[5]缓冲运动[6]加减速运动[7]往复运动[8]变速函数 前面的话 前面介绍过匀速运动的实现及注意事项,本文在匀速运动的基础上, ...
- Popmotion – 小巧,灵活的 JavaScript 运动引擎
Popmotion 是一个只有12KB的 JavaScript 运动引擎,可以用来实现动画,物理效果和输入跟踪.原生的DOM支持:CSS,SVG,SVG路径和DOM属性的支持,开箱即用.Popmoti ...
- javascript运动框架(三)
迟到了好几天,不好意思哈!继续来优化一下javascript运动框架的代码.之前的代码存在bug,当重复点击时速度会加快,那么怎么解决这个bug呢? 现在我们就来解决一下,其实很简单,在开始运动时,关 ...
- 好程序员技术教程分享JavaScript运动框架
好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...
- 原生JavaScript运动功能系列(二):缓冲运动
匀速运动实现回顾 缓冲运动剖析 示例实现 方法提取 匀速运动实现回顾及缓冲运动剖析: 在这个系列的上一篇博客中原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现就运动的核心功能组成 ...
- 【repost】JavaScript运动框架之速度时间版本
一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之 ...
随机推荐
- 页面全部加载完毕和页面dom树加载完毕
dom树加载完毕 $(document).ready()//原生写法document.ready = function (callback) { ///兼容FF,Google ...
- 在App中混合HTML5开发App如何实现的。在App中使用HTML5的优缺点是什么?
参考答案: 在iOS中,通常是通常UIWebView来实现,当然在iOS8以后可以使用WKWebView来实现.有以下几种实现方法: 通过实现UIWebView的代理方法来拦截,判断scheme是否是 ...
- hdu 1262寻找素数对
Problem Description 哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数. 做好了这 ...
- C++深层复制解决指针悬挂
代码: #include <iostream> #include <cstring> using namespace std; class mystring{ public: ...
- C#按钮打开浏览器,网址
1.加入 using System.Diagnostics; 2. private void button_main_baidu_Click(object sender, EventArgs e) { ...
- hdu5360 Hiking(水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Hiking Time Limit: 6000/3000 MS (Java/Oth ...
- 2014-06-13 jq chart
昨天接到上级说要在检测服务器上增加一个可以根据时间来查看服务器信息的线形图,那我首先就在原有的发送监控信息的功能上增加了把信息存入数据库中,然后再数据库中取得数据显示. 至于线形图的插件是jqx 的c ...
- DoctrineMigrationsBundle
数据库迁移特征是数据库抽象层的扩展,允许你用编程的方式,安全.方便.标准化实现数据库结构的更新. 安装 首先使用composer安装 $ composer require doctrine/doctr ...
- Android再学习-20140928-布局
关于布局中的单位 PX是像素,这个没有问题.另外还有两个单位,一个是dp,这个是个相对单位,在任何分辨率的屏幕上显示效果是一样的,所以用dp来进行控件的大小设置.另外,字体的设置推荐用sp,这样字体可 ...
- Linux免SSH密码登录
SSH免密码登录,做个总结吧! 1.安装SSH服务(略过) 2.场景:需要配置主机A无密码登录主机B 在主机A上执行如下: cd ~/.ssh ssh-keygen -t rsa 生成密钥文件 cp ...