前端之家收集整理的这篇文章主要介绍了
JS运动特效之同时运动实现方法分析,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
本文实例讲述了JS运动特效之同时运动实现方法。分享给大家供大家参考,具体如下:
接着上一篇 《》继续折腾
上一篇中我们的运动框架,可以完美的实现让一个物体先变宽,在变高,在变透明度.....,看似很完美了!
貌似可以喝喝茶看看美女了。但是老板突然说,让你同时改变一个物体的宽高和透明度,心碎了一地!!!
拿过之前的运动框架发现,无法实现让div同时又变宽,又变高,有变透明度!!最后无能为力,只好有请JSON大神出场了,不认识json的小伙伴们就找度娘问一下吧!
之前的startMove()函数里都是传入一个attr属性,在传入一个iTarget目标值,但是我们有个JSON这个神器之后,我们可以把属性和目标值,一对对放在JSON里,然后再
startMove里只传入json来代替之前的attr和iTarget
,
比如我们想要改变宽,高,透明度,那么就把他们放入JSON : {width:300,height:300,opacity:30}
然后用for..in遍历这个json就可以得到相应的属性和值了,那么在运动框架程序中该怎么修改那??
先简单的测试说明一下json
var json = {width:200,opacity:30};
for(attr in json){
alert("属性是:" + attr+ "--目标值"+json[attr]);
}
有上面的弹出结果可以看出,json里的widht,height,opacity就是对应的属性名字,200,300,30对于的就是目标值,遍历这个json对象,可以看出attr就对应的是各个属性名,而json[attr]就对应各个目标值,看到这里应该就大概明白怎么修改了吧!
1. 首先function startMove(obj,fn)
中attr,iTarget干掉,传入一个json对象
2.接着在定时器里遍历这个json看看都哪些属性需要变化
完整测试代码如下:
HTML部分:
css部分:
#div1{
width: 200px;height: 200px;
background: green;
}
js部分:
window.onload = function(){
var oDiv = document.getElementById('div1');
oDiv.onmouseover = function () {
startMove(oDiv,{width:300,opacity:30});
}
oDiv.onmouseout = function () {
startMove(oDiv,{width:200,height:200,opacity:100});
}
}
function getStyle(obj,attr){
return getComputedStyle ? getComputedStyle(obj,false)[attr] : obj.currentStyle[attr];
}
function startMove(obj,fn) {//json代替了原来的attr和iTarger参数
clearInterval(obj.timer);
obj.timer = setInterval(function () {
for(attr in json){
var objAttr = 0;
if(attr == "opacity"){ // 由于for in里的key名字是attr所以这里不用替换
objAttr = Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
objAttr = parseInt(getStyle(obj,attr));
}
var iSpeed = (json[attr] -objAttr)/10;// 由之前的iTarget替换成了json[attr]
iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed);
if(objAttr == json[attr]){
clearInterval(obj.timer);
if(fn){// 如果传了 “下一个运动的函数” 就执行
fn();
}
}else{
if(attr == "opacity"){
obj.style.filter = 'alpha(opacity:'+(objAttr+iSpeed)+')';
obj.style.opacity = (objAttr+iSpeed)/100;
}else{
obj.style[attr] = objAttr+iSpeed+'px';
}
}
}
},30);
}
到这里我们的运动框架几乎接近完美了,但是还有一个小问题,什么问题那?下回继续
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
原文链接:https://www.f2er.com/js/34048.html