Heim  >  Artikel  >  Web-Frontend  >  javascript线性渐变一_javascript技巧javascript线性渐变 by 司徒正美svg by 司徒正美svg by 司徒正美svg by 司徒正美javascript线性渐变 by 司徒正美javascript线性渐变 by 司徒正美

javascript线性渐变一_javascript技巧javascript线性渐变 by 司徒正美svg by 司徒正美svg by 司徒正美svg by 司徒正美javascript线性渐变 by 司徒正美javascript线性渐变 by 司徒正美

PHP中文网
PHP中文网Original
2016-05-16 18:44:28982Durchsuche

javascript在处理图像的能力其实是不弱的,可惜浏览器大战连累了它,这还不算,Adobe 收购Macromedia更让SVG处于怠工状态。

作为新力军,苹果为我们带来了canvas标签。canvas首次在Mac OS X中的Dashboard中被引入,之后又被苹果公司的Safari浏览器所支持,紧接着就成为HTML5的标准,被IE内核以外的标准浏览器所支持。苹果做的好事还不止这一桩,它认为SVG太笨重了,于是它把SVG里的滤镜标签统统CSS属性化(SVG的滤镜比IE滤镜还多呢,而且功能更全面)。firefox一看不对劲,连忙自己也搞一套私有属性,只不过是前缀由-webkit-改为-moz-罢了。opera的反应比较呆滞,应该说私底下非常不满,因为opera的CTO就是CSS的发明者Hakon Wium Lie,不喜欢别人对自己的东西啥搞。因此我实现线性渐变就困难重重了,IE需要用IE滤镜,firefox在动态创建SVG存在一些问题,需要用其-moz-前缀的CSS私有属性,safari与chrome需要用-webkit-前缀的CSS私有属性,opera需要用SVG。现在一个个突破吧。

IE要用到DXImageTransform.Microsoft.Gradient滤镜(最后那个Gradient的首字母大写小写无所谓)。

属性 说明
enabled 是否启用滤镜,默认为true
gradientType 是垂直渐变还是水平渐变,默认是0(垂直渐变),1为水平渐变
startColorStr 起始颜色,能接受一个8位hex颜色值,从#FF000000到#FFFFFFFF,默认是蓝色#FF0000F;或者使用red,green等颜色值F
endColorStr 结束颜色,能接受一个8位hex颜色值,从#FF000000到#FFFFFFFF,默认是黑色#FF000000
startColor 作用同startColorStr,接受一个0到4294967295整体颜色值,没有默认值
endColor 作用同endColorStr,接受一个0到4294967295整体颜色值,没有默认值


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


接着讲述一下SVG线性渐变的实现,因为相关的CSS私有属性都衍生于此。由于没有什么空间支持上传SVG,我只能动态生成SVG了。对我来说,能动态实现最好不过了,起码能减少请求数,少写许多大于号小于号……下面是静态实现,至于怎样加入html自己google吧。

linearGradient 有x1,x2,y1,y2等几个属性,可以帮助我们实现水平渐变或垂直渐变。我们大可以把x1,x2,y2,y2当成颜色渐变体的两个点的坐标就是。

当y1等于y2,x1不等于x2,实现水平渐变。
当x1等于x2,y1不等于y2,实现垂直渐变。
当y1不等于y2,x1不等于x2,实现角度渐变。

复制代码 代码如下:



"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
xmlns="http://www.w3.org/2000/svg">
javascript线性渐变(水平) by 司徒正美










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


动态实现,不过在火狐中哑火了,可见火狐在SVG上也怠工了。

复制代码 代码如下:




xmlns="http://www.w3.org/2000/svg">
javascript线性渐变(垂直) by 司徒正美










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


复制代码 代码如下:




xmlns="http://www.w3.org/2000/svg" version="1.1">
javascript线性渐变(角度) by 司徒正美











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


接着说说-moz-linear-gradient,火狐的CSS私有属性,隶属于background-image,不过它也略写成background。语法为:
-moz-linear-gradient( , [, ]* )
我们可以设置这两个点的值坪决定其是水平还是垂直,如
/*水平*/
-moz-linear-gradient(left, right [, ]* )1.
/*垂直*/
-moz-linear-gradient(top, bottom [, ]* )
至于后面的部分,看看下面的运行框就足够了。不过这要用最新版的firefox(3.6a1)才能见效果。


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


接着下来看看-webkit-gradient这个CSS属性,用法来-moz-linear-gradient差不多,但有三点不同。第一个参数用来决定是线性渐变与放射性渐变,这里写linear就可以了。两个点值,一定要为left,right,top与bottom的两个,而且怎样组合也实现不了角度渐变。三是color-stop的偏移量一定为小数。


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


结语,这就是多种浏览器共存的带来的和谐局面,我宁愿IE实现完全垄断了。下一部分才是征途的开始,光IE处理滤镜失效的问题,就要动用table这个上古神器了。SVG,在上面的运框中,你们看到了,我还特意搞了一个小工具来创建这些特殊的对象……

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn