>  기사  >  웹 프론트엔드  >  자바스크립트 선형 그래디언트 2_javascript 기술

자바스크립트 선형 그래디언트 2_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:44:271016검색

가장 큰 사용자 그룹인 IE부터 시작해보자. 이 부분을 개발할 수 없다면 기본적으로는 할 필요가 없다고 할 수 있다. IE에는 Gradient 필터가 있지만 다른 브라우저에 비해 구현이 매우 약합니다. 다중 그라데이션(stop-color)이 없고 각도 그라데이션을 구현할 수 없으며 종종 실패합니다. 내 생각은 텍스트가 있는 DIV가 있는 경우 여러 선형 그래디언트를 얻으려면 먼저 그 안에 있는 텍스트를 꺼낸 다음 여러 DIV를 그 안에 넣은 다음 그래디언트를 적용해야 한다는 것입니다. 수직 그래디언트라면 아무 것도 할 필요 없이 필터와 높이만 설정하면 됩니다. 수평인 경우 부동 상태로 만들거나 절대 위치를 지정하고 제자리에 놓고 필터와 너비를 설정합니다. 그러나 그래디언트 필터는 플로팅되거나 배치된 후에 실제로 실패합니다. 이는 투명 필터를 사용할 때 들어본 적이 없는 일입니다. 다른 방법이 없으므로 고대 유물 탁자를 희생합니다. 하지만 길이와 너비를 설정할 때 스타일을 사용하여 설정하는 것은 유용하지 않습니다. 반드시 DOM 속성을 사용해야 합니다. 그래디언트는 td 요소를 담당합니다. table 요소와 td 요소 사이, td 요소와 내용 사이의 공백을 제거하려면 cellPadding과 cellSpacing도 사용해야 합니다.


[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

Safari , 크롬, 오페라 등이 계획되어 있으며 모두 SVG를 사용하여 구현됩니다. 기능의 길이를 줄이기 위해 두 가지 보조 기능을 특별히 만들었습니다. 코드는 다음과 같습니다.


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, 정지,폭, 높이, 유형){
var svg = createSVG("svg")
attr(svg,{width:width "px",height:height "px"})
엔티티. appendChild(svg );
var defs = createSVG("defs");
svg.appendChild(defs);
var 선형Gradient = createSVG("linearGradient"); 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;ivar offset = stop[i].split(",")[0] "%" ,
color = stop[i].split(",")[1],
stop = createSVG("stop")
attr(stop,{offset:offset,"stop-color" :color} );
linearGradient.appendChild(stop);
}
var ect = createSVG("direct")
attr(ret); x:" 0px",y:"0px",width:width "px",height:height "px",fill:"url(#nasami)"})
}


firefox 개인 속성 사용:


var FFgradient = 함수(엔티티, 정지점, 너비, 높이, 유형){
var cssText = ";배경: -moz-linear-gradient("
cssText = 유형? "상단,하단," :"왼쪽,오른쪽 ,";
.
for(var i=0,j=0,l=stops.length;ivar offset = stop[i].split(" ,")[0 ] "%",
color = stop[i].split(",")[1];
cssText = "color-stop(" [offset,color] "),"
}
cssText = cssText.replace(/,$/,"") ") no-repeat;"
entity.style.cssText = cssText "너비:" 너비 "px;높이:" 높이 "px;"
}


不过今天研磨一下,发现firefox还是支持SVG的线性渐变的,因此纠正我原来的观点。上面的函数只是作用一种实现手段放在这里,它并没有整合到我最终的版本中(虽然它比SVG实现短很多。)这样一来,在老一点版本的firefox中我们也能实现线性渐变了。
下面这个运行框里的渐变效果可在所有主流浏览器中正常运作。

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

再把它做成类。扼要说明一下:它的第一个参数为IE,第二个为哈希。哈希中的各参数都为必选的,width,height的单位为px;type为0或者1,0代表垂直,1为水平;color-stop代表渐变体,由一个字符串数组构成,每个字符串都是由数字加逗号加颜色值组成,数字表代偏移量,单位为%,颜色值可以是red,green等名词,也可以是六位或三位的哈希值。渐变体至少要有一个。
复制代码 代码如下:

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需刷新才能执行]
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.