欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實現多物體運動

 更新時間:2022年05月08日 10:50:10   作者:不像話i  
這篇文章主要為大家詳細介紹了JS實現多物體運動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了JS實現多物體運動的具體代碼,供大家參考,具體內容如下

實現效果圖:

描述:用JS實現簡單的多物體運動動畫,淡出淡化效果,當鼠標放在不同div上時,div會由寬100PX慢慢變成200PX,當鼠標移開之后div恢復原狀,依次來,實現多物體運動效果。

基本步驟:

1.通過getElementsByTagName獲取到要做多物體運動的元素

2.然后for循環(huán)遍歷元素,添加事件

3.定義startMove函數,需要兩個參數,當前“做運動”的元素,和目標值target

具體代碼如下:

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>Document</title>
? ? <script src="startMove.js"></script>
? ? <style>
? ? ? ? div{
? ? ? ? ? ? width: 100px;
? ? ? ? ? ? height: 100px;
? ? ? ? ? ? background: red;
? ? ? ? ? ? /* opacity: 1; */
? ? ? ? ? ? margin: 10px 0;
? ? ? ? }
? ? </style>
</head>
<body>
? ? <div></div>
? ? <div></div>
? ? <div></div>
? ? <div></div>
? ? <div></div>
?
? ? <script>
? ? ? ? // 改變div的width 、height、透明度、邊框 {width:500,height:500,opacity:0.5}
? ? ? ? var divs = document.getElementsByTagName('div');
? ? ? ? for(var i = 0;i<divs.length;i++){
? ? ? ? ? ? divs[i].onmouseenter = startMove(divs[i],{width:200,height:200,opacity:50},function(){
? ? ? ? ? ? ? ? alert('over!')
? ? ? ? ? ? });
? ? ? ? }
? ? ? ? for(var i = 0;i<divs.length;i++){
? ? ? ? ? ? divs[i].onmouseleave = startMove(divs[i],{width:100,height:100,opacity:100});
? ? ? ? }
? ? </script>
</body>
</html>

js代碼:

/**
?*?
?* @param {*} dom 改變形態(tài)的dom對象
?* @param {*} attrObj 要改變的所有元素的屬性形成的對象
?* @param {*} target 改變的目標值
?* @returns?
?*/
function startMove(dom, attrObj, callback) {
? ? var timer = null;
? ? var speed = null;
? ? // 元素屬性的當前值
? ? var iCur = null;
? ? return function() {
? ? ? ? clearInterval(dom.timer);
? ? ? ? dom.timer = setInterval(function() {
? ? ? ? ? ? var flag = true;
? ? ? ? ? ? // 0. 循環(huán)遍歷改變的屬性對象 將每一個屬性的形態(tài)都進行運動
? ? ? ? ? ? for (var param in attrObj) {
? ? ? ? ? ? ? ? // 1. 判斷改變的屬性是不是透明度
? ? ? ? ? ? ? ? if (param === 'opacity') {
? ? ? ? ? ? ? ? ? ? iCur = getComputedStyle(dom)['opacity'] * 100;
? ? ? ? ? ? ? ? ? ? // console.log(iCur);
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? iCur = +getComputedStyle(dom)[param].slice(0, -2);
? ? ? ? ? ? ? ? ? ? console.log(iCur);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? // 2. 求出speed
? ? ? ? ? ? ? ? speed = (attrObj[param] - iCur) / 7;
? ? ? ? ? ? ? ? // 如果正值 向上取整(0.28 -> 1) ?如果是負值 向下取整(-0.28 -> -1)
? ? ? ? ? ? ? ? speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
? ? ? ? ? ? ? ? // 改變div的屬性的值
? ? ? ? ? ? ? ? if (param === 'opacity') {
? ? ? ? ? ? ? ? ? ? dom.style.opacity = (iCur + speed) / 100;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? dom.style[param] = iCur + speed + 'px';
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? // 判斷div所有屬性是否到達目標值
? ? ? ? ? ? ? ? if (iCur !== attrObj[param]) {
? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if (flag) {
? ? ? ? ? ? ? ? // 所有屬性值都到了目標階段 可以清除定時器
? ? ? ? ? ? ? ? clearInterval(dom.timer);
? ? ? ? ? ? ? ? //?
? ? ? ? ? ? ? ? typeof callback === 'function' && callback();
? ? ? ? ? ? }
? ? ? ? ? ? // 上一個屬性運動結束之后 再讓下一個屬性開始運行
? ? ? ? ? ? // 讓一個屬性的目標值到達就停止定時器
? ? ? ? }, 60)
? ? }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論