デモ1
http://jsfiddle.net/Fptq2/2/
最新のすべてのブラウザで動作するはずです。
本質的にそれ:
- ソースを個々の単語に一度分割します
- 各単語をスパンで囲みます (醜いですが効果的です -任意のスタイルをスパンに適用できるようになりました)
- 単純な位置計算を使用して、要素が前の要素よりも低いかどうかを判断します
- インデックスの変更に基づいて色を変更します
- サイズ変更時に #3 ~ 5 を実行します (これは確実に調整する必要があります!)
$(".stripe").each(function(){
var obj = $(this);
var html = obj.html().replace(/(\S+\s*)/g, "<span>$1</span>");
obj.html(html);
});
function highlight(){
var offset = 0;
var colorIndex = 0;
var colors = ["#eee","#000"];
var spans = $(".stripe span");
// note the direct DOM usage here (no jQuery) for performance
for(var i = 0; i < spans.length; i++){
var newOffset = spans[i].offsetTop;
if(newOffset !== offset){
colorIndex = colorIndex === 0 ? 1 : 0;
offset = newOffset;
}
spans[i].style.color = colors[colorIndex];
}
}
highlight();
$(window).on("resize", highlight);
デモ 2
フィドル: http://jsfiddle.net/Fptq2/4/
- より大きなテキスト ブロックを使用する
- 複数の要素に適用された効果を表示
- 「すべてのスパン」セレクターをキャッシュします
- サイズ変更スロットリングを追加
(function () {
$(".stripe").each(function () {
var obj = $(this);
var html = obj.html().replace(/(\S+\s*)/g, "<span>$1</span>");
obj.html(html);
});
var offset = 0;
var colorIndex = 0;
var colors = ["#ccc", "#000"];
var spans = $(".stripe span");
function highlight() {
for (var i = 0; i < spans.length; i++) {
var newOffset = spans[i].offsetTop;
if (newOffset !== offset) {
colorIndex = colorIndex === 0 ? 1 : 0;
offset = newOffset;
}
spans[i].style.color = colors[colorIndex];
}
}
highlight(); // initial highlighting
var timeout;
function throttle(){
window.clearTimeout(timeout);
timeout = window.setTimeout(highlight, 100);
}
$(window).on("resize", throttle);
})();
出力