原生Js深さ解析パッケージ運動関数思想
17894 ワード
(1)単純パッケージ運動関数(幅、高さ、左、右)
透明度については、下の*100は初期値が0~1であるため、まず範囲を拡大します.目標値の透明度を取得して入ってきます.
1~100は次の計算に便利です.
下の運動は幅が広くて、下に移動して、左に移動します.
fnはコールバック関数で、終点まで移動するとこの関数を実行します.
フローは、最初の呼び出し(幅を広げる+コールバック関数を追加する)です.
第二コール(プラス+コールバック関数追加)
3回目の呼び出し:下へ移動する+コールバック関数を追加します.
第4コール(右に移動し、コールバック関数を追加しません)))
効果を同時に現れたいなら、全部第二の対象に書いて、一回呼び出してもいいです.
//
// style
function getStyle(domobj, attr) {
if (window.getComputedStyle) {//
return getComputedStyle(domobj, null)[attr]
} else {//IE
return domobj.currentStyle[attr]
}
}
//
//
function Move(domobj, json) {
// flag true, ;
var flag = true;
// , 。
clearInterval(domobj.timer);
domobj.timer = setInterval(function () {
for (var attr in json) {
//
var target = json[attr];
//
// , px ;
var value = Math.floor(getStyle(domobj, attr));
//
var ispeed = (target - value) / 8;
// , 0 , 0, ;
ispeed = ispeed > 0 ? ispeed = Math.floor(ispeed) : ispeed = Math.ceil(ispeed);
// style
domobj.style[attr] = value + ispeed + 'px'
}
// :
if (value !== target) {
flag = false;
}
// ,
if(flag){
clearInterval(domobj.timer)
}
}, 20)
}
多属性パッケージ運動関数の最適化(幅の高さと左右+透明度+コールバック関数)透明度については、下の*100は初期値が0~1であるため、まず範囲を拡大します.目標値の透明度を取得して入ってきます.
1~100は次の計算に便利です.
function Move(domobj, json, fn) {
// flag true, ;
var flag = true;
// , 。
clearInterval(domobj.timer);
domobj.timer = setInterval(function () {
for (var attr in json) {
//
var target = json[attr];
//
// , px ;
// opacity, *100
if (attr === 'opacity') {
var value = Math.floor(getStyle(domobj, attr) * 100)
} else {
//
var value = Math.floor(getStyle(domobj, attr));
}
//
var ispeed = (target - value) / 8;
// , 0 , 0, ;
ispeed = ispeed > 0 ? ispeed = Math.floor(ispeed) : ispeed = Math.ceil(ispeed);
// style
// , px, px;
if (attr === 'opacity') {
domobj.style[attr] = value + ispeed;
}
domobj.style[attr] = value + ispeed + 'px';
}
// :
if (value !== target) {
flag = false;
}
// ,
if (flag) {
clearInterval(domobj.timer);
if (fn) {//fn , // 。
fn()
}
}
}, 20)
}
このように運動を進める.例えば:幅を広くして、辺の長さまたは右に移動してから左に移動する(コールバック関数を利用して)下の運動は幅が広くて、下に移動して、左に移動します.
fnはコールバック関数で、終点まで移動するとこの関数を実行します.
フローは、最初の呼び出し(幅を広げる+コールバック関数を追加する)です.
第二コール(プラス+コールバック関数追加)
3回目の呼び出し:下へ移動する+コールバック関数を追加します.
第4コール(右に移動し、コールバック関数を追加しません)))
効果を同時に現れたいなら、全部第二の対象に書いて、一回呼び出してもいいです.
odiv.onmousemove = function () {
setMove(odiv, {
width: 300,
}, function () {
setMove(odiv, { height: 300, }, function () {
setMove(odiv, { top: 300, }, function () {
setMove(odiv, {
left: 300,
})
})
})
})
}
ZWの意見をあなたと共有します.ニックネームとWeChat、交流を歓迎します.