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

首頁 > 語言 > JavaScript > 正文

JavaScript 漸變效果頁面圖片控制第1/2頁

2024-05-06 14:17:15
字體:
來源:轉載
供稿:網友
使用該程序能實現很多常見的動畫特效,包括大小變換、位置變換、漸顯漸隱等等。
程序說明: 漸變效果的原理就是利用定時器不斷設置值,如果要減速效果就設置一個步長(詳細看JavaScript 彈簧效果) 。
這里只是把能漸變的屬性(透明度、寬、高、left、top)整合在一起,使用相同的漸變級數(Step)使漸變同步,形成多個屬性同時漸變的效果。

下面說說有用的地方:
【最終樣式】
在JavaScript 圖片切割效果的邊寬獲取中也說到了最終樣式,在使用offset獲取的數據設置寬度高度的時候,必須先減去最終樣式中的邊框寬度。
在這里我使用了muxrwc的在FF下實現currentStyle方法,這樣在ff和ie都可以從currentStyle獲取最終樣式了:
代碼如下:
if(!isIE){
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
}

使用這個獲取邊框寬度:
代碼如下:
this._xBorder = function(){ return (parseInt(obj.currentStyle.borderLeftWidth) + parseInt(obj.currentStyle.borderRightWidth)); }
this._yBorder = function(){ return (parseInt(obj.currentStyle.borderTopWidth) + parseInt(obj.currentStyle.borderBottomWidth)); }

【寬度或高度優先】
寬度或高度優先其實就是先執行其中一個漸變,在完成后再執行另一個漸變。
漸變程序中在執行完一次漸變之后會返回一個bool值表示是否漸變完成,利用這個可以這樣:
代碼如下:
this.SetWidth() && this.SetHeight();

由于&&的特性,當this.SetWidth()返回true時才會去執行this.SetHeight(),這也是不錯的技巧。
同時為了同步漸變,另外的漸變使用了兩倍的步長: 
代碼如下:
this.Step = 2*this.Step;
this.SetOpacity(); this.SetTop(); this.SetLeft();
this.Step = this.Step/2;

這樣就能做出寬度或高度優先的效果了。

【定點漸變】
先說說原理,例如以寬度中點為參照點,可以想象如果寬度減少n,那只要left相對增加n*0.5(即n/2),
那么就可以做出以中點為中心變換的效果(當然要先把變換對象設為相對或絕對定位)。
那這個“0.5”怎么來的呢?有點數理知識應該知道就是漸變對象左邊到變換點跟漸變對象總寬度的比
程序里用Width.pos保存這個值,在變換前先計算好變換點的位置:

this._x = this._obj.offsetLeft + this._obj.offsetWidth * this.Width.pos;
每次變換都根據這個位置和寬度來重新設置left:

this._obj.style.left = this._x - this._obj.offsetWidth * this.Width.pos + "px";

可能有人會說直接在原有left基礎上加上變換寬度*Width.pos不是一樣嗎?
但問題是經過多次的變換計算(到達目標值前會有多次計算)之后得到的值已經不準確了。
因為在變換計算過程中很多小數會被忽略,隨著計算次數增多結果的出入也越大,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 溆浦县| 泰和县| 道真| 新昌县| 宁海县| 梨树县| 镇雄县| 珠海市| 宁陵县| 玉树县| 清涧县| 积石山| 四川省| 阳高县| 来凤县| 昔阳县| 濮阳市| 临澧县| 大庆市| 海晏县| 滨州市| 睢宁县| 乐至县| 义乌市| 安义县| 灵璧县| 陇川县| 黔南| 高陵县| 海城市| 徐水县| 和龙市| 衡阳县| 蓬安县| 通城县| 连云港市| 北流市| 固原市| 吉木乃县| 托克逊县| 库尔勒市|