javascript實(shí)現(xiàn)緩動動畫效果
本文實(shí)例為大家分享了javascript實(shí)現(xiàn)緩動動畫效果的具體代碼,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)思路
1、主要使用setInterval定時函數(shù)
2、給需要動畫的元素添加絕對定位和偏移量,注意它的父元素要給相對定位
3、多個元素執(zhí)行動畫,可以將動畫代碼封裝成一個函數(shù)
4、元素調(diào)用定時函數(shù),定時移動,定時函數(shù)里- - -計算出每次移動距離
公式:var step = (target - obj.offsetLeft) / 20;
obj 動畫對象, target 目標(biāo)左偏移量,20 控制的是動畫速度,數(shù)值越大越慢,越小越快
5、定時函數(shù)里還可以接收回調(diào)函數(shù),有的話,動畫結(jié)束時執(zhí)行回調(diào)函數(shù)
6、注意定時函數(shù)里最前面寫上清除動畫的代碼- - -clearInterval(obj.timer);不寫的話,每次觸發(fā)元素動畫會效果疊加;寫上清除之前的動畫影響
代碼示例
<!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>aninamate動畫</title>
<style>
* {
margin: 0;
padding: 0;
}
.content {
width: 1000px;
margin: 0 auto;
}
button {
padding: 5px;
margin: 60px 10px;
border: 1px solid #666;
outline-color: palevioletred;
}
.both {
background-color: pink;
color: #fff;
background-color: palevioletred;
}
.box {
position: relative;
height: 210px;
margin: 0px auto;
background-color: #191b28;
}
.yutu {
position: absolute;
top: 0;
left: 0;
width: 180px;
height: 210px;
}
.qiaojingjing {
position: absolute;
top: 0;
left: 820px;
width: 180px;
height: 210px;
}
.word1 {
display: none;
position: absolute;
top: -50px;
left: 45%;
}
.word2 {
display: none;
position: absolute;
top: -30px;
left: 50%;
}
</style>
</head>
<body>
<div class="content">
<button class="btn1">于途前進(jìn)</button>
<button class="btn2">喬晶晶前進(jìn)</button>
<button class="both">雙向奔赴</button>
<button class="btn3">于途后退</button>
<button class="btn4">喬晶晶后退</button>
<div class="box">
<img src="images/于途.png" alt="" class="yutu">
<img src="images/喬晶晶.png" alt="" class="qiaojingjing">
<span class="word1">余生請多指教!</span>
<span class="word2">余生請多指教!</span>
</div>
</div>
<script>
var btn1 = document.querySelector('.btn1');
var btn2 = document.querySelector('.btn2');
var btn3 = document.querySelector('.btn3');
var btn4 = document.querySelector('.btn4');
var both = document.querySelector('.both');
var yutu = document.querySelector('.yutu');
var qiaojingjing = document.querySelector('.qiaojingjing');
var word1 = document.querySelector('.word1');
var word2 = document.querySelector('.word2');
btn1.addEventListener('click', function() {
animate(yutu, 340, function() {
word1.style.display = 'block';
});
});
btn2.addEventListener('click', function() {
animate(qiaojingjing, 520, function() {
word2.style.display = 'block';
});
});
btn3.addEventListener('click', function() {
animate(yutu, 0, function() {
word1.style.display = 'none';
});
});
btn4.addEventListener('click', function() {
animate(qiaojingjing, 820, function() {
word2.style.display = 'none';
});
});
both.addEventListener('click', function() {
animate(yutu, 340);
animate(qiaojingjing, 520);
word1.style.display = 'block';
word2.style.display = 'block';
});
// 動畫函數(shù) obj動畫對象, target目標(biāo)左偏移量, callback回調(diào)函數(shù)
function animate(obj, target, callback) {
// 清除之前的動畫
clearInterval(obj.timer);
obj.timer = setInterval(function() {
// 計算出每次移動距離
var step = (target - obj.offsetLeft) / 20;
// 步數(shù)取整
step = step > 0 ? Math.ceil(step) : Math.floor(step);
obj.style.left = obj.offsetLeft + step + 'px';
if (obj.offsetLeft == target) {
// 停止動畫
clearInterval(obj.timer);
// 如果有回調(diào)函數(shù),執(zhí)行回調(diào)函數(shù)
if (callback) {
callback();
}
}
}, 30);
}
</script>
</body>
</html>
動畫效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用JavaScript 處理 URL 的兩個函數(shù)代碼
用JavaScript 處理 URL 的兩個函數(shù)代碼...2007-08-08
JS判斷數(shù)組里是否有重復(fù)元素的方法小結(jié)
這篇文章主要介紹了JS判斷數(shù)組里是否有重復(fù)元素的方法,結(jié)合實(shí)例形式分析了javascript針對數(shù)組重復(fù)元素判斷相關(guān)的遍歷、排序、遞歸等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
關(guān)于scrollLeft,scrollTop的瀏覽器兼容性測試
彈窗在谷歌瀏覽器chrome下的位置跟在別的瀏覽器下不一樣,接下來介紹下scrollLeft,scrollTop的瀏覽器兼容性,感興趣的你可以參考下哈2013-03-03
javascript的tab切換原理與效果實(shí)現(xiàn)方法
這篇文章主要介紹了javascript的tab切換原理與效果實(shí)現(xiàn)方法,實(shí)例分析了簡單的tab切換實(shí)現(xiàn)技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-01-01
JavaScript中變量提升和函數(shù)提升實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于JavaScript中變量提升和函數(shù)提升的相關(guān)資料,以及JS變量提升和函數(shù)提升的順序,文中給出了詳細(xì)的介紹,需要的朋友可以參考下2021-07-07
JavaScript數(shù)據(jù)類型轉(zhuǎn)換簡單方法舉例
JavaScript是一種無類型語言,但同時JavaScript提供了一種靈活的自動類型轉(zhuǎn)換的處理方式,下面這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2023-12-12

