javascript 線(xiàn)性漸變二
更新時(shí)間:2009年10月14日 21:33:20 作者:
上部分我們逐一分析了各瀏覽器的可行方法,這部分將搞鼓出一個(gè)統(tǒng)一的類(lèi)來(lái)實(shí)現(xiàn)跨瀏覽器的線(xiàn)性漸變。
先來(lái)IE的,這是最大的用戶(hù)群,如果這部分開(kāi)發(fā)不出來(lái),基本可以說(shuō)不用做了。IE雖然有Gradient濾鏡,但對(duì)比其他瀏覽器的實(shí)現(xiàn)特弱,沒(méi)有多重漸變(stop-color),不能實(shí)現(xiàn)角度漸變,而且還經(jīng)常失效。我的思路是這樣,假如有一個(gè)帶文本的DIV,要實(shí)現(xiàn)多重線(xiàn)性漸變,我們首先得把它里面的文本取出來(lái),然后里面放幾個(gè)DIV,有幾重就放幾個(gè),然后把它們漸變。如果是垂直漸變,這好辦,什么也不用做,只需設(shè)置其濾鏡與各個(gè)高就行了。如果水平,就讓其浮動(dòng)或絕對(duì)定位,放到適當(dāng)?shù)奈恢?,設(shè)置其濾鏡與寬。但漸變?yōu)V鏡竟然會(huì)在浮動(dòng)后或定位后失效,這是在使用透明濾鏡時(shí)聞所未聞的。沒(méi)有辦法,祭出上古神器table。但設(shè)置長(zhǎng)與寬時(shí),使用style來(lái)設(shè)置是不頂用的,一定要用DOM屬性。漸變則由它的td元素負(fù)責(zé)。為了去除table元素與td元素之間,td元素與其內(nèi)容之間的空白,我們還得用到cellPadding與cellSpacing。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
safari,chrome與opera打算都用SVG實(shí)現(xiàn)。為了減少函數(shù)的長(zhǎng)度,特意搞了兩個(gè)輔助函數(shù)。
var createSVG = function(tag){
return document.createElementNS("http://www.w3.org/2000/svg",tag);
};
var attr= function(node,bag){
for(var i in bag){
if(bag.hasOwnProperty(i))
node.setAttribute(i,bag[i])
}
};
var COSgradient = function(entity,stops,width,height,type){
var svg = createSVG("svg");
attr(svg,{width:width+"px",height:height+"px"})
entity.appendChild(svg);
.
var defs = createSVG("defs");
svg.appendChild(defs);
var linearGradient = createSVG("linearGradient");
defs.appendChild(linearGradient);
attr(linearGradient,{id:"nasami",x1:"0%",y1:"0%"})
if(type){
attr(linearGradient,{x2:"100%",y2:"0%"})
}else{
attr(linearGradient,{x2:"0%",y2:"100%"})
}
for(var i=0,j=0,l=stops.length;i<l;i++,j++){
var offset = stops[i].split(",")[0] + "%",
color = stops[i].split(",")[1],
stop = createSVG("stop");
attr(stop,{offset:offset,"stop-color":color});
linearGradient.appendChild(stop);
}
var rect = createSVG("rect");
svg.appendChild(rect);
attr(rect,{x:"0px",y:"0px",width:width+"px",height:height+"px",fill:"url(#nasami)"});
}
firefox則利用其私有屬性:
var FFgradient= function(entity,stops,width,height,type){
var cssText = ";background: -moz-linear-gradient("
cssText += type? "top,bottom," :"left,right,";
.
for(var i=0,j=0,l=stops.length;i<l;i++,j++){
var offset = stops[i].split(",")[0] + "%",
color = stops[i].split(",")[1];
cssText += "color-stop("+[offset,color]+"),"
}
cssText = cssText.replace(/,$/,"")+") no-repeat;";
entity.style.cssText = cssText+"width:"+width+"px;height:"+height+"px;"
}
不過(guò)今天研磨一下,發(fā)現(xiàn)firefox還是支持SVG的線(xiàn)性漸變的,因此糾正我原來(lái)的觀(guān)點(diǎn)。上面的函數(shù)只是作用一種實(shí)現(xiàn)手段放在這里,它并沒(méi)有整合到我最終的版本中(雖然它比SVG實(shí)現(xiàn)短很多。)這樣一來(lái),在老一點(diǎn)版本的firefox中我們也能實(shí)現(xiàn)線(xiàn)性漸變了。
下面這個(gè)運(yùn)行框里的漸變效果可在所有主流瀏覽器中正常運(yùn)作。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
再把它做成類(lèi)。扼要說(shuō)明一下:它的第一個(gè)參數(shù)為IE,第二個(gè)為哈希。哈希中的各參數(shù)都為必選的,width,height的單位為px;type為0或者1,0代表垂直,1為水平;color-stop代表漸變體,由一個(gè)字符串?dāng)?shù)組構(gòu)成,每個(gè)字符串都是由數(shù)字加逗號(hào)加顏色值組成,數(shù)字表代偏移量,單位為%,顏色值可以是red,green等名詞,也可以是六位或三位的哈希值。漸變體至少要有一個(gè)。
new Gradient("gradient",{width:800,height:100,type:0,"color-stop":["0,red",
3."16,orange","32,yellow","48,green","64,blue","80,indigo","100,violet"]})
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
safari,chrome與opera打算都用SVG實(shí)現(xiàn)。為了減少函數(shù)的長(zhǎng)度,特意搞了兩個(gè)輔助函數(shù)。
復(fù)制代碼 代碼如下:
var createSVG = function(tag){
return document.createElementNS("http://www.w3.org/2000/svg",tag);
};
var attr= function(node,bag){
for(var i in bag){
if(bag.hasOwnProperty(i))
node.setAttribute(i,bag[i])
}
};
var COSgradient = function(entity,stops,width,height,type){
var svg = createSVG("svg");
attr(svg,{width:width+"px",height:height+"px"})
entity.appendChild(svg);
.
var defs = createSVG("defs");
svg.appendChild(defs);
var linearGradient = createSVG("linearGradient");
defs.appendChild(linearGradient);
attr(linearGradient,{id:"nasami",x1:"0%",y1:"0%"})
if(type){
attr(linearGradient,{x2:"100%",y2:"0%"})
}else{
attr(linearGradient,{x2:"0%",y2:"100%"})
}
for(var i=0,j=0,l=stops.length;i<l;i++,j++){
var offset = stops[i].split(",")[0] + "%",
color = stops[i].split(",")[1],
stop = createSVG("stop");
attr(stop,{offset:offset,"stop-color":color});
linearGradient.appendChild(stop);
}
var rect = createSVG("rect");
svg.appendChild(rect);
attr(rect,{x:"0px",y:"0px",width:width+"px",height:height+"px",fill:"url(#nasami)"});
}
firefox則利用其私有屬性:
復(fù)制代碼 代碼如下:
var FFgradient= function(entity,stops,width,height,type){
var cssText = ";background: -moz-linear-gradient("
cssText += type? "top,bottom," :"left,right,";
.
for(var i=0,j=0,l=stops.length;i<l;i++,j++){
var offset = stops[i].split(",")[0] + "%",
color = stops[i].split(",")[1];
cssText += "color-stop("+[offset,color]+"),"
}
cssText = cssText.replace(/,$/,"")+") no-repeat;";
entity.style.cssText = cssText+"width:"+width+"px;height:"+height+"px;"
}
不過(guò)今天研磨一下,發(fā)現(xiàn)firefox還是支持SVG的線(xiàn)性漸變的,因此糾正我原來(lái)的觀(guān)點(diǎn)。上面的函數(shù)只是作用一種實(shí)現(xiàn)手段放在這里,它并沒(méi)有整合到我最終的版本中(雖然它比SVG實(shí)現(xiàn)短很多。)這樣一來(lái),在老一點(diǎn)版本的firefox中我們也能實(shí)現(xiàn)線(xiàn)性漸變了。
下面這個(gè)運(yùn)行框里的漸變效果可在所有主流瀏覽器中正常運(yùn)作。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
再把它做成類(lèi)。扼要說(shuō)明一下:它的第一個(gè)參數(shù)為IE,第二個(gè)為哈希。哈希中的各參數(shù)都為必選的,width,height的單位為px;type為0或者1,0代表垂直,1為水平;color-stop代表漸變體,由一個(gè)字符串?dāng)?shù)組構(gòu)成,每個(gè)字符串都是由數(shù)字加逗號(hào)加顏色值組成,數(shù)字表代偏移量,單位為%,顏色值可以是red,green等名詞,也可以是六位或三位的哈希值。漸變體至少要有一個(gè)。
復(fù)制代碼 代碼如下:
new Gradient("gradient",{width:800,height:100,type:0,"color-stop":["0,red",
3."16,orange","32,yellow","48,green","64,blue","80,indigo","100,violet"]})
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
您可能感興趣的文章:
- 神奇!js+CSS+DIV實(shí)現(xiàn)文字顏色漸變效果
- js實(shí)現(xiàn)有過(guò)渡漸變效果的圖片輪播相冊(cè)(兼容IE,ff)
- JavaScript 漸變效果頁(yè)面圖片控制
- 純js和css實(shí)現(xiàn)漸變色包括靜態(tài)漸變和動(dòng)態(tài)漸變
- JS Tween 顏色漸變
- javascript漸變顯示的雅虎中國(guó)選項(xiàng)卡效果代碼
- javascript支持IE和firefox(FF)的漸變透明效果
- javascript簡(jiǎn)易動(dòng)畫(huà)類(lèi)(div漸變)
- 利用遞增的數(shù)字返回循環(huán)漸變的顏色的js代碼
- 漂亮! js實(shí)現(xiàn)顏色漸變效果
相關(guān)文章
js如何判斷對(duì)象數(shù)組中是否存在某個(gè)對(duì)象
這篇文章主要介紹了js如何判斷對(duì)象數(shù)組中是否存在某個(gè)對(duì)象問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Javascript如何實(shí)現(xiàn)對(duì)象扁平化實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于Javascript如何實(shí)現(xiàn)對(duì)象扁平化的扁平化處理簡(jiǎn)而言之就是對(duì)對(duì)象中的對(duì)象提取出來(lái),放在一個(gè)對(duì)象里面,形象的說(shuō)就是把兒子的后代當(dāng)成自己的兒子,下面相關(guān)資料,需要的朋友可以參考下2022-11-11
用JavaScript實(shí)現(xiàn)仿Windows關(guān)機(jī)效果
用JavaScript實(shí)現(xiàn)仿Windows關(guān)機(jī)效果...2007-03-03
JavaScript的null和undefined區(qū)別示例介紹
在Javascript中對(duì)于這種生命后沒(méi)有給定初始值的變量,就給他一個(gè)undefined,如果要將一個(gè)標(biāo)識(shí)符聲明稱(chēng)object類(lèi)型,但是暫時(shí)不給他實(shí)例,那么就可以將它先初始化為null2014-09-09
BootStrap智能表單實(shí)戰(zhàn)系列(七)驗(yàn)證的支持
這篇文章主要介紹了BootStrap智能表單實(shí)戰(zhàn)系列(七)驗(yàn)證的支持 ,凡是涉及到用戶(hù)編輯信息然后保存的頁(yè)面,都涉及到一個(gè)數(shù)據(jù)是否符合要求的檢查,需要客服端和服務(wù)器端的校驗(yàn)的問(wèn)題,本文介紹非常詳細(xì),具有參考價(jià)值,需要的朋友可以參考下2016-06-06
JavaScript深入淺出__proto__和prototype
這篇文章主要介紹了JavaScript深入淺出__proto__和prototype,文章基于JavaScript的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹。具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
javascript函數(shù)的4種調(diào)用方式與this的指向
本文主要介紹了javascript函數(shù)的4種調(diào)用方式與this(上下文)的指向,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀一下2023-05-05

