金喜正规买球

javascript线性渐变3

原创|其它|编辑:郝浩|2009-10-14 11:22:25.000|阅读 508 次

概述:javascript在处理图像的能力其实是不弱的,可惜浏览器大战连累了它,这还不算,Adobe 收购Macromedia更让SVG处于怠工状态。作为新力军,苹果为我们带来了canvas标签。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

上一部分给出的函数已经完全地实现了跨浏览器了,但在IE的实现是极其低劣,动用了多个table以及一向为人所诟病的滤镜。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

我们可以在以及了解到更多的颜色值。

1.var htmlcolor={ black :"#000",green :"#008000",silver :"#c0c0c0",lime :"#0f0",
2.  gray :"#808080",olive :"#808000",white :"#fff",yellow :"#ff0",
3.  maroon :"#800000",navy :"#000080",red :"#f00",blue :"#00f",
4.  purple :"#800080",teal :"#008080",fuchsia :"#f0f",aqua :"#0ff",
5.  indigo :"#4b0082",orange : "#ffa500",sienna :"#a0522d",plum :"#dda0dd",
6.  gold :"#ffd700", tan :"#d2b48c", snow :"#fffafa",violet :"#ee82ee"
7.}

接着我们在需要线性渐变的那个元素内部创建一个同样大小的rect元素,然后里面再添加一个fill元素,用来设置渐变。伪码如下:

1.   
2.<div class="gradient" style="position:relative;width:width;height:height">
3.  javascript线性渐变 by 司徒正美 实现多重水平渐变效果
4.  <vml:rect style="position:absolute;width:width;height;top:0;left:0" stroked="f" >
5.    <vml:fill colors="与SVG相对应的color-stop" focus="100%" type="gradient" method="linear"/>
6.  </vml:rect>
7.</div>

利用VML实现IE的线性渐变后整个类的长度减少一半。

我们再来看如何实现角度渐变,IE那边好办,直接传入一个角就行了(0—360,也可以为负数)。SVG比较麻烦,它由linearGradient 的四个属性来控制倾斜度,x1,x2,y2,y2,实质就是两个点。假设第一个点为(0,0),第二个点为(100,0),它就是水平渐变。假设第一个点为(0,0),第二个点为(0,100),它就是垂直渐变。要实现倾斜就必须让第二个点的坐标与第一个点的坐标完全不相等,无论是X轴还是Y轴。这就要用到三角函数了。

1.var x = (Math.sin(angle*Math.PI/180) * 100).toFixed(2)+"%";
2.var y = (Math.cos(angle*Math.PI/180)* 100).toFixed(2)+"%";
3.this.attr(linearGradient,{x2:x,y2:y});

我们也应该看得出水平渐变与垂直渐变其实只是一个特例,我们大可以废除type这个属性,改成angle,传入一个0至360的数。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@fc6vip.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP