演示 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);
})();
输出