javascript 線性漸變?nèi)?/h1>
更新時間:2009年10月14日 21:45:09 作者:
上一部分給出的函數(shù)已經(jīng)完全地實現(xiàn)了跨瀏覽器了,但在IE的實現(xiàn)是極其低劣,動用了多個table以及一向為人所詬病的濾鏡。
IE還有一個利器至今沒有被使用過,那就是VML。雖然比不上SVG,但它還是非常強(qiáng)大的。在實現(xiàn)漸變上,其fill還比IE的Gragient濾鏡強(qiáng)悍得多了。不過VML出現(xiàn)得比較早,只支持很少的顏色名,如red,blue,yellow,其他如orange就可以搞死它了。因此要使用VML做線性漸變,我們得對這些顏色名做一下轉(zhuǎn)換。
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
我們可以在火狐官網(wǎng)以及W3C了解到更多的顏色值。
復(fù)制代碼 代碼如下:
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"
}
接著我們在需要線性漸變的那個元素內(nèi)部創(chuàng)建一個同樣大小的rect元素,然后里面再添加一個fill元素,用來設(shè)置漸變。偽碼如下:
復(fù)制代碼 代碼如下:
<div class="gradient" style="position:relative;width:width;height:height">
javascript線性漸變 by 司徒正美 實現(xiàn)多重水平漸變效果
<vml:rect style="position:absolute;width:width;height;top:0;left:0" stroked="f" >
<vml:fill colors="與SVG相對應(yīng)的color-stop" focus="100%" type="gradient" method="linear"/>
</vml:rect>
</div>
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
利用VML實現(xiàn)IE的線性漸變后整個類的長度減少一半。
我們再來看如何實現(xiàn)角度漸變,IE那邊好辦,直接傳入一個角就行了(0—360,也可以為負(fù)數(shù))。SVG比較麻煩,它由linearGradient 的四個屬性來控制傾斜度,x1,x2,y2,y2,實質(zhì)就是兩個點(diǎn)。假設(shè)第一個點(diǎn)為(0,0),第二個點(diǎn)為(100,0),它就是水平漸變。假設(shè)第一個點(diǎn)為(0,0),第二個點(diǎn)為(0,100),它就是垂直漸變。要實現(xiàn)傾斜就必須讓第二個點(diǎn)的坐標(biāo)與第一個點(diǎn)的坐標(biāo)完全不相等,無論是X軸還是Y軸。這就要用到三角函數(shù)了。
復(fù)制代碼 代碼如下:
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});
我們也應(yīng)該看得出水平漸變與垂直漸變其實只是一個特例,我們大可以廢除type這個屬性,改成angle,傳入一個0至360的數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
-
JavaScript?Promise執(zhí)行流程深刻理解
這篇文章主要介紹了JavaScript?Promise執(zhí)行流程深刻理解,他是一個構(gòu)造函數(shù),每個創(chuàng)建的promise都有各自狀態(tài)和值,且狀態(tài)初始值為pending,值為undefined 2022-06-06
-
Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實現(xiàn)方法
Bootstrap-Table是一個Boostrap的表格插件,能夠?qū)SON數(shù)據(jù)直接顯示在表格中。接下來通過本文給大家分享Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實現(xiàn)方法,感興趣的朋友一起看看吧 2016-09-09
最新評論
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 |
復(fù)制代碼 代碼如下:
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"
}
接著我們在需要線性漸變的那個元素內(nèi)部創(chuàng)建一個同樣大小的rect元素,然后里面再添加一個fill元素,用來設(shè)置漸變。偽碼如下:
復(fù)制代碼 代碼如下:
<div class="gradient" style="position:relative;width:width;height:height">
javascript線性漸變 by 司徒正美 實現(xiàn)多重水平漸變效果
<vml:rect style="position:absolute;width:width;height;top:0;left:0" stroked="f" >
<vml:fill colors="與SVG相對應(yīng)的color-stop" focus="100%" type="gradient" method="linear"/>
</vml:rect>
</div>
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
利用VML實現(xiàn)IE的線性漸變后整個類的長度減少一半。
我們再來看如何實現(xiàn)角度漸變,IE那邊好辦,直接傳入一個角就行了(0—360,也可以為負(fù)數(shù))。SVG比較麻煩,它由linearGradient 的四個屬性來控制傾斜度,x1,x2,y2,y2,實質(zhì)就是兩個點(diǎn)。假設(shè)第一個點(diǎn)為(0,0),第二個點(diǎn)為(100,0),它就是水平漸變。假設(shè)第一個點(diǎn)為(0,0),第二個點(diǎn)為(0,100),它就是垂直漸變。要實現(xiàn)傾斜就必須讓第二個點(diǎn)的坐標(biāo)與第一個點(diǎn)的坐標(biāo)完全不相等,無論是X軸還是Y軸。這就要用到三角函數(shù)了。
復(fù)制代碼 代碼如下:
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});
我們也應(yīng)該看得出水平漸變與垂直漸變其實只是一個特例,我們大可以廢除type這個屬性,改成angle,傳入一個0至360的數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
相關(guān)文章
JavaScript?Promise執(zhí)行流程深刻理解
這篇文章主要介紹了JavaScript?Promise執(zhí)行流程深刻理解,他是一個構(gòu)造函數(shù),每個創(chuàng)建的promise都有各自狀態(tài)和值,且狀態(tài)初始值為pending,值為undefined2022-06-06Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實現(xiàn)方法
Bootstrap-Table是一個Boostrap的表格插件,能夠?qū)SON數(shù)據(jù)直接顯示在表格中。接下來通過本文給大家分享Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實現(xiàn)方法,感興趣的朋友一起看看吧2016-09-09