JavaScript 線形グラデーション 2_JavaScript スキル

WBOY
リリース: 2016-05-16 18:44:27
オリジナル
1021 人が閲覧しました

まずは最大のユーザー層であるIEから見ていきましょう。この部分が開発できないのであれば、基本的には開発する必要はないと言えます。 IE にはグラデーション フィルターがありますが、その実装は他のブラウザに比べて非常に弱く、複数のグラデーション (ストップ カラー) がなく、角度グラデーションを実装できず、失敗することがよくあります。私の考えは、テキストを含む DIV がある場合、複数の線形グラデーションを実現するには、まずその中のテキストを取り出し、次にその中に複数の DIV を (複数の DIV と同じ数だけ) 入れてから、それらをグラデーションする必要があるということです。垂直グラデーションの場合は、フィルターと高さを設定するだけで簡単に行うことができます。水平の場合は、フローティングにするか、絶対位置に配置して、所定の位置に配置し、フィルターと幅を設定します。しかし、実際にはグラデーション フィルターは浮動または配置された後に失敗します。これはクリア フィルターを使用する場合には前例のないことです。仕方がないので古代遺物テーブルを犠牲にする。ただし、長さと幅を設定する場合、スタイルを使用して設定することは役に立ちません。DOM 属性を使用する必要があります。勾配はその td 要素を担当します。 table 要素と td 要素の間、および td 要素とそのコンテンツの間のスペースを削除するには、cellPadding と cellSpacing も使用する必要があります。


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新して実行する必要があります
]

Safari 、chrome、operaが予定されており、すべてSVGを使用して実装されます。関数の長さを短縮するために、2 つの補助関数が特別に作成されました。 コードは次のとおりです。


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, stop,width ,height,type){
var svg = createSVG("svg");
attr(svg,{width:width "px",height:height "px"})
エンティティ。 appendChild(svg);
var defs = createSVG("defs");
var linearGradient = 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 rect = createSVG("rect");
svg.appendChild(rect); x:" 0px",y:"0px",width:width "px",height:height "px",fill:"url(#nasami)"}); >firefox プライベート プロパティを使用します:




コードをコピー


コードは次のとおりです:


var FFgradient = function(entity, stop,width,height,type){
var cssText = ";background: -moz-linear-gradient(" cssText = type? "top,bottom," :"left,right ,"; . 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 "width:" width "px;height:"高さ "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需刷新才能执行]
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!