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>
<style>
#box{
width: 100px;
height: 100px;
background-color: aqua;
}
</style>
</head>
<body>
<div id="box"></div>
<script src="sport.js"></script>
<script>
const o_div = document.querySelector('#box');
o_div.onmouseenter = function(){
sport_14(this,{width : 400},() =>{
sport_14(this,{height : 400},() =>{
sport_14(this,{opacity : 30})
})
});
}
o_div.onmouseleave = function(){
sport_14(this,{width : 100},() =>{
sport_14(this,{height : 100},() =>{
sport_14(this,{opacity : 100})
})
});
}
</script>
</body>
</html>
js部分
function getStyle(obj,attr){
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,1)[attr];
}
function sport(obj,json,fn){
clearInterval(obj.timer);
obj.timer = setInterval(() => {
let flag = true;
for(let attr in json){
let cur = attr === 'opacity' ? parseInt(parseFloat(getStyle(obj,attr)) * 100) : parseInt(getStyle(obj,attr));
let speed = (json[attr] - cur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(cur !== json[attr]){
flag = false;
}
if(attr === 'opacity'){
obj.style.opacity = (cur + speed) / 100;
obj.style.filter = 'alpha(opacity=' + (cur + speed) + ')';
}else{
obj.style[attr] = cur + speed + 'px';
}
}
if(flag){
clearInterval(obj.timer);
if(typeof fn === 'function'){
fn();
}
}
},30)
}