IE還有一個利器至今沒有被使用過,那就是VML。雖然比不上SVG,但它還是非常強大的。在實現漸層上,其fill還比IE的Gragient濾鏡強悍得多了。不過VML出現得比較早,只支援很少的顏色名,如red,blue,yellow,其他如orange就可以搞死它了。因此要使用VML做線性漸層,我們得對這些顏色名做一下轉換。
HTML4的顏色值
black = #000000 |
green = #008000 |
silver = #c0c0c0 |
lime = #00ff00 |
gray = #808080 |
olive = #808000 |
white = #ffffff |
yellow = #ffff00 |
maroon = #800000 |
navy = #000080 |
red = #ff0000 |
blue = #0000ff |
purple = #800080 |
teal = #008080 |
fuchsia = #ff00ff |
aqua = #00ffff |
我們可以在Firefox官網以及W3C瞭解到更多的顏色值。 複製代碼 代碼如下:var htmlcolor={ black :"#000",green :"#008000",silver :"#c0c0c0",lime :"#0f0",
gray :"#808080",olive :"#808000",white :"#fff",yellow :"#ff0",
maroon :"#800000",navy :"#000080",red :"#f00",blue :"#00f",
purple :"#800080",teal :"#008080",fuchsia :"#f0f",aqua :"#0ff",
indigo :"#4b0082",orange : "#ffa500",sienna :"#a0522d",plum :"#dda0dd",
gold :"#ffd700", tan :"#d2b48c", snow :"#fffafa",violet :"#ee82ee"
}
接著我們在需要線性漸層的那個元素內部建立一個同樣大小的rect元素,然后里面再添加一個fill元素,用來設定漸層。偽碼如下: 複製代碼 代碼如下:<div class="gradient" style="position:relative;width:width;height:height">
javascript線性漸層 by 司徒正美 實現多重水平漸層效果
<vml:rect style="position:absolute;width:width;height;top:0;left:0" stroked="f" >
<vml:fill colors="與SVG相對應的color-stop" focus="100%" type="gradient" method="linear"/>
</vml:rect>
</div>
<meta charset="utf-8"><meta name="keywords" content="javascript線性漸層 by 司徒正美"><meta name="description" content="javascript線性漸層 by 司徒正美"><br /><style type="text/css"> .gradient{ width:800px; height:100px; } </style><p>javascript線性漸層 by 司徒正美 實現多重水平漸層效果javascript線性漸層 by 司徒正美 實現多重垂直漸層效果<p>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
利用VML實現IE的線性漸層後整個類的長度減少一半。
我們再來看如何?角度漸層,IE那邊好辦,直接傳入一個角就行了(0—360,也可以為負數)。SVG比較麻煩,它由linearGradient 的四個屬性來控制傾斜度,x1,x2,y2,y2,實質就是兩個點。假設第一個點為(0,0),第二個點為(100,0),它就是水平漸層。假設第一個點為(0,0),第二個點為(0,100),它就是垂直漸層。要實現傾斜就必須讓第二個點的座標與第一個點的座標完全不相等,無論是X軸還是Y軸。這就要用到三角函數了。 複製代碼 代碼如下:var x = (Math.sin(angle*Math.PI/180) * 100).toFixed(2)+"%";
var y = (Math.cos(angle*Math.PI/180)* 100).toFixed(2)+"%";
this.attr(linearGradient,{x2:x,y2:y});
我們也應該看得出水平漸層與垂直漸層其實只是一個特例,我們大可以廢除type這個屬性,改成angle,傳入一個0至360的數。 <meta charset="utf-8"><meta name="keywords" content="javascript線性漸層 by 司徒正美"><meta name="description" content="javascript線性漸層 by 司徒正美"><br /><style type="text/css"> .gradient{ width:800px; height:100px; } </style><p>javascript線性漸層 by 司徒正美 實現多重水平漸層效果javascript線性漸層 by 司徒正美 實現多重垂直漸層效果javascript線性漸層 by 司徒正美 實現多重角度漸層效果<p>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]