如何寫一個通用的JavaScript效果庫!(2/2)

來源:互聯網
上載者:User

在上個隨筆中貼出了效果庫的整體架構,和一個簡單的opacity外掛程式. 今天這個隨筆主要是擴充其他常用
效果外掛程式,畢竟架構只能是個空殼,內容還是要自己充實。
如果看過了我上篇的實現細節,這裡就不多說廢話了,來段代碼先: 複製代碼 代碼如下:/**//****************************************************/
// 移動, 這裡是move to 就是移動到 x,y 當然,大家也可以再擴充一個move by 移動x個象素
Effect.Init.move=function(effect){ //初始化
if (effect.options.x!==undefined || effect.options.y!==undefined){
var pos=Position.cumulativeOffset(effect.element);
effect.setting.left =pos[0];
effect.setting.top =pos[1];
effect.setting.position =effect.element.style.position;
effect.element.style.position ="absolute"
effect.options.x=(effect.options.x===undefined)?effect.setting.left:effect.options.x;
effect.options.y=(effect.options.y===undefined)?effect.setting.top :effect.options.y;
}
}
Effect.Fn.move=function(effect,pos){ //效果
if (effect.options.x===undefined && effect.options.y===undefined) return
effect.element.style.left=effect.setting.left + (effect.options.x-effect.setting.left) * pos +"px";
effect.element.style.top =effect.setting.top + (effect.options.y-effect.setting.top ) * pos +"px";
}
/**//****************************************************/

/**//****************************************************/
// zoom by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.zoom=function(effect){
effect.setting.zoom =effect.element.style.zoom || 1;
// firefox 不支援 css的 zoom 用 改變 width,height的方式代替
if (effect.options.zoom!==undefined && navigator.userAgent.toLowerCase().indexOf('firefox') != -1){
effect.options.w=effect.element.offsetWidth * effect.options.zoom;
effect.options.h=effect.element.offsetHeight * effect.options.zoom;
}
}
Effect.Fn.zoom=function(effect,pos){
if (effect.options.zoom===undefined) return;
effect.element.style.zoom=effect.setting.zoom+(effect.options.zoom-effect.setting.zoom)*pos
}
/**//****************************************************/
/**//****************************************************/
// size 同上,是 size to, 改變到指定大小 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.size=function(effect){
if (effect.options.w!==undefined || effect.options.h!==undefined){
effect.setting.overflow =effect.element.style.overflow || 'visible';
effect.setting.width =effect.element.offsetWidth;
effect.setting.height =effect.element.offsetHeight;
effect.element.style.overflow ="hidden"
effect.options.w=(effect.options.w===undefined)?effect.setting.width :effect.options.w;
effect.options.h=(effect.options.h===undefined)?effect.setting.height:effect.options.h;
}
}
Effect.Fn.size=function(effect,pos){
if (effect.options.w===undefined && effect.options.h===undefined) return;
effect.element.style.width =effect.setting.width + (effect.options.w-effect.setting.width ) * pos +"px";
effect.element.style.height=effect.setting.height+ (effect.options.h-effect.setting.height) * pos +"px";
}
/**//****************************************************/
/**//****************************************************/
// 背景色 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.bgcolor=function(effect){
if (effect.options.bgcolor!==undefined && /^\#?[a-f0-9]{6}$/i.test(effect.options.bgcolor)){
var color =effect.element.style.backgroundColor || "#ffffff";
//FireFox 下,即使css樣式設定背景為 #ffffff格式,但程式取到的是 rgb(255,255,255)格式, 這裡把他轉化為 #ffffff格式
if (/rgb/i.test(color)){ // "rgb(255, 0, 255)"
//var arr=color.replace(/[rgb\(\s\)]/gi,"").split(",")
var arr=eval(color.replace("rgb","new Array"))
color="#"+Number(arr[0]).toColorPart()+Number(arr[1]).toColorPart()+Number(arr[2]).toColorPart()
}
effect.setting.bgcolor=color
}
}
Effect.Fn.bgcolor=function(effect,pos){
if (effect.options.bgcolor===undefined) return;
var c1=effect.setting.bgcolor,c2=effect.options.bgcolor
var arr1=[parseInt(c1.slice(1,3),16),parseInt(c1.slice(3,5),16),parseInt(c1.slice(5),16)]
var arr2=[parseInt(c2.slice(1,3),16),parseInt(c2.slice(3,5),16),parseInt(c2.slice(5),16)]
var r=Math.round(arr1[0]+(arr2[0]-arr1[0])*pos)
var g=Math.round(arr1[1]+(arr2[1]-arr1[1])*pos)
var b=Math.round(arr1[2]+(arr2[2]-arr1[2])*pos)
effect.element.style.backgroundColor="#"+r.toColorPart()+g.toColorPart()+b.toColorPart()
}
/**//****************************************************/
/**//****************************************************/
// 透明度,這個上個貼過了 by Go_Rush(阿舜) from http://ashun.cnblogs.com/
Effect.Init.opacity=function(effect){
if (effect.options.opacity===undefined) return;
effect.setting.opacity=Opacity(effect.element);
}
Effect.Fn.opacity=function(effect,pos){
if (effect.options.opacity===undefined) return;
Opacity(effect.element,effect.setting.opacity+(effect.options.opacity-effect.setting.opacity)*pos);
}
/**//****************************************************/

這裡 effect.setting 是非常有用而且非常重要的冬冬,所有的通過options傳進來自訂函數都可以
通過effect.setting來擷取element最初的設定。 在很多場合,我們需要在 options 中傳一個 onComplete
函數進來, 用來在效果執行完畢後,打掃戰場,恢複一些設定。
這些效果是可以重疊的,大家可以看看下面我寫的例子。
寫了十來個例子,應該很詳細了。
完整的,可調試代碼和例子如下:<br /><fieldset><legend>單一效果</legend><p><button onclick="javascript:foo1()">顏 色 foo1</button><br /><button onclick="javascript:foo2()">大 小 foo2</button><br /><button onclick="javascript:foo3()">位 置 foo3</button><br /><button onclick="javascript:foo4()">透 明 度 foo4</button><br /><button onclick="javascript:foo5()">Zoom foo5</button><br /><button onclick="javascript:foo6()">所有 foo6</button> </p></fieldset><fieldset><legend>複合效果</legend><p><button onclick="javascript:fix1()"> 淡出fix1</button><br /><button onclick="javascript:fix2()"> 折起fix2</button><br /><button onclick="javascript:fix3()"> 慢慢變小消失 fix3</button><br /><button onclick="javascript:fix4()"> 慢慢變小消失2 fix4</button><br /><button onclick="javascript:fix5()"> 變色 fix5</button><br /><button onclick="javascript:fix6()"> 震動5次 fix6</button> </p></fieldset><p><button onclick="javascript:location.reload()"> 每次效果後按這裡恢複</button> </p><p>注意 FireFox 不支援 Zoom </p> Go_Rush(阿舜)<br /> <p>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.