最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生javascript運動函數(shù)的封裝示例【勻速、拋物線、多屬性的運動等】

 更新時間:2020年02月23日 11:49:30   作者:巴啦啦小能量  
這篇文章主要介紹了原生javascript運動函數(shù)的封裝,結合實例形式分析了JavaScript封裝勻速、拋物線、多屬性的運動等函數(shù)及相關使用方法,需要的朋友可以參考下

本文實例講述了原生javascript運動函數(shù)的封裝。分享給大家供大家參考,具體如下:

//封裝勻速運動
//參數(shù):
// 1、dom對象
// 2、樣式屬性(top,left,width,height,opacity等等)
// 3、起始位置,結束位置
// 4、速度:時間間隔,步長
// 5、方向:
//返回值
function moveObj(domObj,attr,startValue,endValue,timeSpace,step,direction) {
 let currValue = startValue;
 let myTimer = setInterval(function(){
 //1、改變數(shù)據(jù)
 currValue = currValue+direction*step;
 //2、判斷邊界
 // if(currValue>=endValue){//??
 // currValue = endValue;//??
 // window.clearInterval(myTimer);
 // }
 if(Math.abs(currValue-endValue)<step){
  currValue = endValue;
  window.clearInterval(myTimer);
 }
 //3、改變外觀
 if(attr=="opacity"){
  domObj.style[attr] = currValue;
 }else{
  domObj.style[attr] = currValue+"px";
 }
 },timeSpace);
}
//封裝勻速運動
//參數(shù):
// 1、dom對象
// 2、樣式屬性(top,left,width,height,opacity等等)
// 3、結束位置
// 4、時長:
//返回值
function moveObj02(domObj,attr,endValue,timeLong) {
 let startValue = parseFloat(getStyle(domObj,attr));//??
 let direction= endValue-startValue>0?1:-1;//??
 let timeSpace = 10;
 let step = Math.abs(endValue-startValue)/(timeLong/timeSpace) // endValue-startValue/步子數(shù);//
 let currValue = startValue;
 let myTimer = setInterval(function(){
 //1、改變數(shù)據(jù)
 currValue = currValue+direction*step;
 //2、判斷邊界
 if(Math.abs(currValue-endValue)<step){
  currValue = endValue;
  window.clearInterval(myTimer);
 }
 //3、改變外觀
 if(attr=="opacity"){
  domObj.style[attr] = currValue;
 }else{
  domObj.style[attr] = currValue+"px";
 }
 },timeSpace);
}
//封裝拋物線運動(右開口為例)
//參數(shù):
// dom對象
// 起點
// 終點
// 總時長
//
//返回值:無
function parabola(domObj,startPoint,endPoint,timeLong,func){
 //一、初始化
 let offsetX = endPoint.x-startPoint.x;
 let offsetY = endPoint.y-startPoint.y;
 let p = (offsetY*offsetY)/(2*offsetX);
 let left1 = 0;
 domObj.style.left = startPoint.x+"px";
 domObj.style.top = startPoint.y+"px";
 let timeSpace = 10;
 let step = Math.abs(endPoint.x-startPoint.x)/(timeLong/timeSpace) // endValue-startValue/步子數(shù);//
 //二、啟動定時器
 let myTimer = setInterval(function(){
 //1、改變數(shù)據(jù)
 left1=left1+step;
 let top1=Math.sqrt(2*p*left1);
 //2、判斷邊界
 if(left1>=offsetX){
  left1 = offsetX;
  top1=Math.sqrt(2*p*left1);
  window.clearInterval(myTimer);
  if(func){
  func();
  }
 }
 //3、改變外觀
 domObj.style.left = left1+startPoint.x+"px";
 domObj.style.top = top1+startPoint.y+"px";
 },timeSpace);
}
//淡入:
//參數(shù):
// dom對象
// 時長;
//返回值:無
function fadeIn(domObj,timeLong){
 domObj.style.opacity = 0;
 moveObj02(domObj,"opacity",1,timeLong);
}
//淡出:
//參數(shù):
// dom對象
// 時長;
//返回值:無
function fadeOut(domObj,timeLong){
 domObj.style.opacity = 1;
 moveObj02(domObj,"opacity",0,timeLong);
}
//淡入和淡出:
//參數(shù):
// domObjIn:淡入的dom對象
// domObjOut:淡出的dom對象
// 時長;
//返回值:無
function fadeInOut(domObjIn,domObjOut,timeLong,func){
 domObjIn.style.opacity = 0;
 domObjOut.style.opacity = 1;
 let startValue = 0;
 let endValue = 1;
 let direction= 1;
 let timeSpace = 10;
 let step = Math.abs(endValue-startValue)/(timeLong/timeSpace) // endValue-startValue/步子數(shù);//
 let currValue = startValue;
 let myTimer = setInterval(function(){
 //1、改變數(shù)據(jù)
 currValue = currValue+direction*step;
 //2、判斷邊界
 if(Math.abs(currValue-endValue)<step){
  currValue = endValue;
  window.clearInterval(myTimer);
  func&&func();
 }
 //3、改變外觀
 domObjIn.style.opacity = currValue;
 domObjOut.style.opacity = 1-currValue;
 },timeSpace);
}
//多屬性的運動
//參數(shù):
// 1、dom對象
// 2、每個樣式屬性的結束值
// 4、時長:
//返回值
//調用示例:
/*
animate($("box"),{
 "width":600,
 "height":400,
 "left":50
},2000)
*/
function animate(domObj,endObj,timeLong) {
 // let startValue = parseFloat(getStyle(domObj,attr));//??
 let startObj = {}
 for(let key in endObj){
 startObj[key] = parseFloat(getStyle(domObj,key));
 }
 // let direction= endValue-startValue>0?1:-1;//??
 let directionObj = {};
 for(let key in endObj){
 directionObj[key] = endObj[key]>startObj[key]?1:-1;
 }
 let timeSpace = 10;
 // let step = Math.abs(endValue-startValue)/(timeLong/timeSpace) // endValue-startValue/步子數(shù);//
 let stepObj = {};
 for(let key in endObj){
 stepObj[key] = Math.abs(endObj[key]-startObj[key] )/(timeLong/timeSpace);
 }
 //let currValue = startValue;
 let currObj = {};
 for(let key in endObj){
 currObj[key] = startObj[key];
 }
 let myTimer = setInterval(function(){
 //1、改變數(shù)據(jù)
 //currValue = currValue+direction*step;
 for(let key in endObj){
  currObj[key] = currObj[key]+directionObj[key]*stepObj[key];
 }
 //2、判斷邊界
 let firstKey = Object.keys(endObj)[0];
 if(Math.abs(currObj[firstKey]-endObj[firstKey])<stepObj[firstKey]){
  for(let key in endObj){
  currObj[key] = endObj[key];
  }
  window.clearInterval(myTimer);
 }
 //3、改變外觀
 for(let key in endObj){
  if(key=="opacity"){
  domObj.style[key] = currObj[key];
  }else{
  domObj.style[key] = currObj[key]+"px";
  }
 }
 },timeSpace);
}

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript運動效果與技巧匯總》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數(shù)學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

  • js實現(xiàn)簡單排列組合的方法

    js實現(xiàn)簡單排列組合的方法

    這篇文章主要介紹了js實現(xiàn)簡單排列組合的方法,可實現(xiàn)數(shù)學上排列組合算法功能,涉及JavaScript數(shù)組與字符串操作技巧,需要的朋友可以參考下
    2016-01-01
  • discuz中用到的javascript函數(shù)解析

    discuz中用到的javascript函數(shù)解析

    discuz中用到的js不論是多瀏覽器兼容性和實用性都是非常不錯的,推薦大家看下
    2008-05-05
  • 使用webpack處理stylus文件的配置方法

    使用webpack處理stylus文件的配置方法

    這篇文章主要介紹了使用webpack處理stylus文件的配置方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-03-03
  • uniapp微信小程序使用xr加載模型的操作方法

    uniapp微信小程序使用xr加載模型的操作方法

    這篇文章主要介紹了uniapp微信小程序使用xr加載模型的操作方法,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 輕松實現(xiàn)Bootstrap圖片輪播

    輕松實現(xiàn)Bootstrap圖片輪播

    這篇文章主要介紹了全面解析Bootstrap圖片輪播效果,Bootstrap提供了carousel插件,實現(xiàn)圖片輪播非常方便,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 微信小程序HTTP請求從0到1封裝

    微信小程序HTTP請求從0到1封裝

    這篇文章主要給大家介紹了關于微信小程序HTTP請求從0到1封裝的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用微信小程序具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • js實現(xiàn)不重復導入的方法

    js實現(xiàn)不重復導入的方法

    這篇文章主要介紹了js實現(xiàn)不重復導入的方法,實例分析了JavaScript基于文件與字符串判斷操作實現(xiàn)JS文件不重復導入的相關技巧,需要的朋友可以參考下
    2016-03-03
  • 如何寫好你的JavaScript【推薦】

    如何寫好你的JavaScript【推薦】

    在實際工作中,我們應該經(jīng)常會看到一些功能上沒有問題,但編碼風格和規(guī)范卻十分糟糕的代碼,這往往會讓人不敢再往下閱讀,甚至會影響閱讀者一天的心情。本文的目的在于幫助那些沒有養(yǎng)成良好的編碼風格,缺乏相應編碼規(guī)范意識的JavaScript學習者們改善他們的編碼形象。
    2017-03-03
  • JS數(shù)組方法reverse()用法實例分析

    JS數(shù)組方法reverse()用法實例分析

    這篇文章主要介紹了JS數(shù)組方法reverse()用法,結合實例形式分析了JS數(shù)組reverse()方法基本功能、用法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • JS數(shù)組在內存中的效率問題淺析

    JS數(shù)組在內存中的效率問題淺析

    用js有很久了,但都沒有深究過js的數(shù)組形式,下面這篇文章主要給大家介紹了關于JS數(shù)組在內存中的效率問題,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02

最新評論

华池县| 江陵县| 兴文县| 屏南县| 康保县| 太仆寺旗| 井研县| 瓮安县| 靖边县| 天祝| 同江市| 呼玛县| 龙南县| 通州市| 辽宁省| 宜章县| 玉环县| 海丰县| 江油市| 成都市| 玛沁县| 奎屯市| 右玉县| 台东县| 武清区| 绥德县| 长葛市| 扎鲁特旗| 岫岩| 治多县| 盐津县| 郴州市| 巴彦淖尔市| 达孜县| 临武县| 呼伦贝尔市| 鄂托克前旗| 景谷| 双桥区| 陵川县| 青田县|