国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實現窗口抖動效果

2019-11-20 08:42:34
字體:
來源:轉載
供稿:網友

原理介紹

  抖動其實是往復運動的一種特殊形式,只不過往復運動是一種無摩擦力的無限運動,且以速度為參照依據;而抖動以位置作為參照依據,最終停在起始點

  在網頁中最常見的一種抖動效果應該是窗口抖動提示了

  抖動元素從起始點開始,先向右移動最大距離len,然后移動到對稱的左邊位置;然后再向右移動稍微小一點的距離,再移動到對稱的左邊位置;以此循環,最終元素停止在起始點

代碼實現

  抖動在代碼實現上,無非就是通過定時器,每隔一段時間讓left或top值進行變化

  在運動實現中,有兩種距離變化的思路

思路一

div.style.left = div.offsetLeft + value;

  每次都獲取元素的當前樣式,再與變化的value值進行運算

思路二

left = div.offsetLeft;......div.style.left = left + value;

  在定時器開啟之前,獲取元素的初始樣式,再與變化的value值進行運算

  從抖動實現上來說,使用第二種方法,把距離變化完全交給value值變化來實現較為簡單

  所以,代碼實現的關鍵就是了解value是如何變化的

  假設最遠距離為目標target,同方向的距離間隔為步長step。如果用數字更直觀的表示,value的值類似于4、-4、2、-2、0。所以還需要一個變量dir來控制起始抖動方向,定時器每運動一次都要對dir進行更改

//定時器開啟前的變量聲明dir = 1;step = 0;left = div.offsetLeft//定時器里面的代碼value = dir*(target - step);if(step >= target){step = target}div.style.left = left + value + 'px';if(dir === -1){step++; }dir = -dir;

  將抖動效果封裝為shakeMove.js

function getCSS(obj,style){if(window.getComputedStyle){return getComputedStyle(obj)[style];}return obj.currentStyle[style];} function shakeMove(json){//聲明要進行抖動的元素var obj = json.obj;//聲明元素抖動的最遠距離var target = json.target;//默認值為20target = Number(target) || 20;//聲明元素的變化樣式var attr = json.attr;//默認為'left' attr = attr || 'left'; //聲明元素的起始抖動方向var dir = json.dir;//默認為'1',表示開始先向右抖動dir = Number(dir) || '1';//聲明元素每次抖動的變化幅度var stepValue = json.stepValue;stepValue = Number(stepValue) || 2;//聲明回調函數 var fn = json.fn;//聲明步長stepvar step = 0;//保存樣式初始值var attrValue = parseFloat(getCSS(obj,attr));//聲明參照值valuevar value;//清除定時器if(obj.timer){return;}//開啟定時器obj.timer = setInterval(function(){//抖動核心代碼value = dir*(target - step);//當步長值大于等于最大距離值target時if(step >= target){step = target}//更新樣式值obj.style[attr] = attrValue + value + 'px';//當元素到達起始點時,停止定時器if(step == target){clearInterval(obj.timer);obj.timer = 0;//設置回調函數fn && fn.call(obj); } //如果此時為反向運動,則步長值變化if(dir === -1){step = step + stepValue; }//改變方向dir = -dir; },50); }

實例應用

  下面利用封裝的shakeMove來實現一些簡單的抖動應用

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style>.test{height: 50px;width: 50px;position: absolute;top: 50px;} </style></head><body><div id="box"><div class="test" style="left:10px;background:lightblue"></div><div class="test" style="left:70px;background:lightgreen"></div><div class="test" style="left:130px;background:pink"></div><div class="test" style="left:190px;background:lightcoral"></div><div class="test" style="left:250px;background:orange"></div></div><script src="http://files.cnblogs.com/files/xiaohuochai/shakeMove.js"></script><script>var aDiv = box.getElementsByTagName('div');for(var i = 0; i < aDiv.length; i++){aDiv[i].onmouseover = function(){shakeMove({obj:this,attr:'top'});}}</script></body></html>

以上所述是小編給大家介紹的JavaScript實現窗口抖動效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林西县| 禄丰县| 江源县| 绵阳市| SHOW| 龙江县| 通州市| 宜城市| 嘉善县| 交口县| 通化县| 德令哈市| 海阳市| 北辰区| 德江县| 和顺县| 榆中县| 万州区| 新营市| 宝清县| 南投市| 清原| 靖江市| 辽宁省| 平度市| 彩票| 江源县| 彩票| 凌源市| 徐州市| 扶风县| 灵璧县| 沧源| 乳山市| 固镇县| 揭西县| 资兴市| 潼关县| 泗洪县| 桂林市| 鸡泽县|