原生js封裝運(yùn)動框架的示例講解
昨天我們說了一下原生JS中常用的兼容性寫法,今天我們來說一下運(yùn)動框架.
正常情況下我們要寫一個運(yùn)動的效果會用到tween.js這么一個插件,這個東西不是一般人寫出來的,因?yàn)槔锩嫔婕暗倪\(yùn)動效果都是經(jīng)過一堆數(shù)學(xué)的函數(shù)運(yùn)算出來的,我們平常人是寫不出來的,所有我們就自己封裝一個運(yùn)動框架,有什么問題改起來也方便,下面我們就開始封裝.
首先,我們先寫一個div,設(shè)置一些簡單的樣式,我們就拿這個div舉例子
如下代碼:
#div{
width: 100px;
height: 100px;
background: gold;
position: absolute;
left:0;
top:0;
opacity: 1;
}
然后我們就開始寫js代碼了,如下:
window.onload=function() {
var oDiv = document.getElementById("div");
var timer;
寫一個函數(shù),方便以后用的時(shí)候直接調(diào)用就好了,首先先傳入幾個參(要運(yùn)動的對象,變動的屬性,終點(diǎn)距離,運(yùn)動總時(shí)間,回調(diào)函數(shù))----今天的只是簡單的封裝一下,你也寫可以傳入一個json
function move(obj,name, target, dur,fn) {
// 總步數(shù)=總時(shí)間÷計(jì)時(shí)器設(shè)定的時(shí)間
var count = parseInt(dur / 30);
// 起始位置
var start = parseFloat(setStyle(obj,name));
// 總距離=傳入的距離-起始距離
var dis = target - start;
// 每步運(yùn)動的距離=總距離÷總步數(shù)
var spen = dis / count;
// 定義起始步數(shù)
var n = 0;
timer = setInterval(function () {
n++;
// 把當(dāng)前運(yùn)動的位置保存
var cur=start + n * spen;
// 判斷屬性是不是透明度,透明度不用加單位
if(name=='opacity'){
obj.style[name]=cur;
// 兼容IE低版本,IE的透明度是1到100
obj.style.filter='alpha('+cur*100+')';
}else {
obj.style[name] = start + n * spen + "px";
}
// 判斷運(yùn)動是否完成
if (n == count) {
// 完成后清除定時(shí)器,停止運(yùn)動
clearInterval(timer);
// 判斷用戶是否傳入回調(diào)函數(shù)
fn && fn();
};
}, 30);
};
然后自己隨便寫一些調(diào)用回調(diào)函數(shù),測試一下:
oDiv.onclick=function(){
move(oDiv,"left",600,1000,function(){
move(oDiv,'top',400,1000,function(){
move(oDiv,"width",300,1000,function(){
move(oDiv,"opacity",0,1000);
});
});
});
};
// 獲取非行間樣式
function setStyle(obj,name){
// 考慮兼容性問題
if(obj.currentStyle){//不兼容火狐和谷歌
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,false)[name];//不兼容IE
};
};
};
好了,今天就先封裝到這里了,這只是簡單的封裝一下,明天我們會改進(jìn)一下,比如參數(shù)太多、參數(shù)順序不能亂的問題,還有多次點(diǎn)擊計(jì)時(shí)器出現(xiàn)的Bug的問題,如果你有好的方法歡迎評論區(qū)留言,程序員之間就是要相互學(xué)習(xí)的,明天見,老鐵們!
以上這篇原生js封裝運(yùn)動框架的示例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- JS實(shí)現(xiàn)運(yùn)動緩沖效果的封裝函數(shù)示例
- JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動的動畫效果封裝示例
- 原生JS實(shí)現(xiàn)圖片無縫滾動方法(附帶封裝的運(yùn)動框架)
- 原生JS封裝animate運(yùn)動框架的實(shí)例
- 原生JS實(shí)現(xiàn)風(fēng)箱式demo,并封裝了一個運(yùn)動框架(實(shí)例代碼)
- JS實(shí)現(xiàn)勻速運(yùn)動的代碼實(shí)例
- 使用JavaScript 實(shí)現(xiàn)對象 勻速/變速運(yùn)動的方法
- JavaScript中的勻速運(yùn)動和變速(緩沖)運(yùn)動詳細(xì)介紹
- 原生javascript實(shí)現(xiàn)勻速運(yùn)動動畫效果
- 淺談Javascript中勻速運(yùn)動的停止條件
- js指定步長實(shí)現(xiàn)單方向勻速運(yùn)動
- 原生javascript運(yùn)動函數(shù)的封裝示例【勻速、拋物線、多屬性的運(yùn)動等】
相關(guān)文章
JS如何將數(shù)字金額轉(zhuǎn)換成中文金額格式
這篇文章主要介紹了JS如何將數(shù)字金額轉(zhuǎn)換成中文金額格式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
JavaScript 創(chuàng)建隨機(jī)數(shù)和隨機(jī)圖片
關(guān)于javascript隨機(jī)數(shù)的,很早以前的文章了,不過內(nèi)容還是不錯的,如果想要更多的效果,可以去腳本之家搜下。2009-12-12
JavaScript實(shí)現(xiàn)答題評分功能頁面
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)答題評分功能頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
JavaScript中為什么null==0為false而null大于=0為true(個人研究)
今天閑來沒啥事,研究了一下有關(guān)“null”和“0”的關(guān)系。希望大家看完了能有所收獲,在此與大家分享下,希望也可以受益匪淺2013-09-09
yolov5項(xiàng)目部署+微信小程序前端展示的全過程
YOLOV5模型從發(fā)布到現(xiàn)在都是炙手可熱的目標(biāo)檢測模型,被廣泛運(yùn)用于各大場景之中,下面這篇文章主要給大家介紹了關(guān)于yolov5項(xiàng)目部署+微信小程序前端展示的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11

