JavaScript運(yùn)動(dòng)框架 鏈?zhǔn)竭\(yùn)動(dòng)到完美運(yùn)動(dòng)(五)
基于前幾篇的運(yùn)動(dòng)框架基礎(chǔ),本文主要講解一下鏈?zhǔn)竭\(yùn)動(dòng),就是運(yùn)動(dòng)完后接著再運(yùn)動(dòng),比如很多網(wǎng)站中,一個(gè)方框的出現(xiàn)和退出:出現(xiàn)時(shí)先變寬再變高,退出時(shí)先變矮再變窄退出!
之前的模型是:
startMove(obj, json);
現(xiàn)在改為:
startMove(obj, json, fn);
也就是在第一次運(yùn)動(dòng)結(jié)束的時(shí)候執(zhí)行fn(); fn是傳過(guò)來(lái)的一個(gè)參數(shù),這個(gè)參數(shù)是個(gè)函數(shù),定時(shí)器清理之后手動(dòng)運(yùn)行fn();如果想采用鏈?zhǔn)竭\(yùn)動(dòng),那就是在fn中再調(diào)用startMove(obj, json, fn),再在里面的fn中調(diào)用startMove(obj, json, fn),可以一直玩下去
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>運(yùn)動(dòng)框架(五):鏈?zhǔn)竭\(yùn)動(dòng)到完美運(yùn)動(dòng)</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
background: orange;
margin: 10px;
float: left;
}
</style>
</head>
<body>
<div id="div1"></div>
<script type="text/javascript">
var oDiv = document.getElementById('div1');
oDiv.onmouseover = function() {
startMove(oDiv, {width:300,opacity:30}, function() {
startMove(oDiv, {height:500});
});
};
oDiv.onmouseout = function() {
startMove(oDiv, {height:100}, function() {
startMove(oDiv, {width:100,opacity:100});
})
};
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
function startMove(obj, json, fn) {
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));
}
if (cur != json[attr]) {
bStop = false;
}
var speed = (json[attr] - cur)/10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
cur += speed;
if (attr === 'opacity') {
obj.style.filter = 'alpha(opacity:' + cur + ')';
obj.style.opacity = cur/100;
} else {
obj.style[attr] = cur + 'px';
}
}
if (bStop) {
clearInterval(obj.timer);
if (fn) fn();
}
}, 30);
}
</script>
</body>
</html>
最后提取出來(lái)的完美運(yùn)動(dòng)框架如下,motionFrame.js:
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
function startMove(obj, json, fn) {
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));
}
if (cur != json[attr]) {
bStop = false;
}
var speed = (json[attr] - cur)/10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
cur += speed;
if (attr === 'opacity') {
obj.style.filter = 'alpha(opacity:' + cur + ')';
obj.style.opacity = cur/100;
} else {
obj.style[attr] = cur + 'px';
}
}
if (bStop) {
clearInterval(obj.timer);
if (fn) fn();
}
}, 30);
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS多物體 任意值 鏈?zhǔn)?緩沖運(yùn)動(dòng)
- Js實(shí)現(xiàn)簡(jiǎn)單的小球運(yùn)動(dòng)特效
- js運(yùn)動(dòng)動(dòng)畫(huà)的八個(gè)知識(shí)點(diǎn)
- javascript實(shí)現(xiàn)10個(gè)球隨機(jī)運(yùn)動(dòng)、碰撞實(shí)例詳解
- JS實(shí)現(xiàn)勻速運(yùn)動(dòng)的代碼實(shí)例
- 使用JavaScript 實(shí)現(xiàn)對(duì)象 勻速/變速運(yùn)動(dòng)的方法
- js實(shí)現(xiàn)緩沖運(yùn)動(dòng)效果的方法
- JavaScript中的勻速運(yùn)動(dòng)和變速(緩沖)運(yùn)動(dòng)詳細(xì)介紹
- Javascript實(shí)現(xiàn)重力彈跳拖拽運(yùn)動(dòng)效果示例
- javascript動(dòng)畫(huà)之圓形運(yùn)動(dòng),環(huán)繞鼠標(biāo)運(yùn)動(dòng)作小球
- Javascript模擬加速運(yùn)動(dòng)與減速運(yùn)動(dòng)代碼分享
- JS運(yùn)動(dòng)特效之鏈?zhǔn)竭\(yùn)動(dòng)分析
相關(guān)文章
npm?install報(bào)錯(cuò)Error:EPERM:operation?not?permitted,rename解決
這篇文章主要給大家介紹了關(guān)于npm?install報(bào)錯(cuò)Error:EPERM:operation?not?permitted,rename的解決辦法,文中介紹了可能遇到的多種原因以及解決辦法,需要的朋友可以參考下2024-01-01
JavaScript文本特效實(shí)例小結(jié)【3個(gè)示例】
這篇文章主要介紹了JavaScript文本特效,結(jié)合3個(gè)實(shí)例分析了javascript基于定時(shí)器的文字動(dòng)態(tài)操作特效相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-12-12
Javascript面試經(jīng)典套路reduce函數(shù)查重
reduce函數(shù),是ECMAScript5規(guī)范中出現(xiàn)的數(shù)組方法.下面通過(guò)本文給大家分享Javascript面試經(jīng)典套路reduce函數(shù)查重,需要的朋友參考下吧2017-03-03
CSS(js)限制頁(yè)面顯示的文本字符長(zhǎng)度
限制頁(yè)面顯示的字符長(zhǎng)度,一直被眾多網(wǎng)友傾睬,本人也是一fans利用閑暇時(shí)間搜集整理了一些實(shí)用技巧,需要了解的朋友可以參考下2012-12-12
創(chuàng)建echart多個(gè)聯(lián)動(dòng)的示例代碼
這篇文章主要介紹了創(chuàng)建echart多個(gè)聯(lián)動(dòng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
uniapp組件之tab選項(xiàng)卡滑動(dòng)切換功能實(shí)現(xiàn)
這篇文章主要介紹了uniapp組件之tab選項(xiàng)卡滑動(dòng)切換功能實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-01-01
原生javascript圖片自動(dòng)或手動(dòng)切換示例附演示源碼
圖片自動(dòng)或手動(dòng)切換,想必會(huì)在很多地方有見(jiàn)過(guò)吧,本文將為大家介紹的是使用原生javascript實(shí)現(xiàn)的焦點(diǎn)圖切換,感興趣的朋友可以參考下2013-09-09
javascript實(shí)現(xiàn)貪吃蛇小練習(xí)
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)貪吃蛇的小練習(xí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07

