javascript链式运动框架案例

时间:2022-07-27 20:15:18

javascript链式运动框架

任务描述:

当鼠标移入红色矩形时,该矩形宽度逐渐增加至400px,之后高度逐渐增加至400px;

当鼠标移出红色矩形时,该矩形高度逐渐减小至200px,之后宽度逐渐减小至200px。

效果图:

javascript链式运动框架案例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>JS小案例:多物体变宽</title>
<style>
body {
height: 2000px;
margin: 0px;
} div {
width: 200px;
height: 200px;
background: red;
margin: 10px;
}
</style>
<script>
window.onload = function () { //补充代码
}
</script>
</head> <body>
<div id='div1'></div>
</body> </html>

  

参考代码:

oDiv1 = document.getElementById('div1');

oDiv1.onmouseover = function () {
startMove(oDiv1, 'width', 400, function () {
startMove(oDiv1, 'height', 400)
});
} oDiv1.onmouseout = function () {
startMove(oDiv1, 'height', 200, function () {
startMove(oDiv1, 'width', 200)
});
} function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name];
}
else { return getComputedStyle(obj, null)[name];
}
} function startMove(obj, attr, iTarget, fnEnd) { clearInterval(obj.timer); obj.timer = setInterval(function () { var cur = 0; if (attr == 'opacity') { //Math.round()四舍五入取整主要是针对低浮点数的精度问题。
cur = Math.round(parseFloat(getStyle(obj, attr)) * 100); } else { cur = parseInt(getStyle(obj, attr));
} var speed = (iTarget - cur) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (cur == iTarget) { clearInterval(obj.timer); if (fnEnd) {
fnEnd();
} } else { if (attr == 'opacity') { obj.style.opacity = (cur + speed) / 100; obj.style.filter = 'alpha(opacity=' + (cur + speed) + ")"; } else { obj.style[attr] = cur + speed + 'px'; } } }, 30) }