div.logo
),我怎样才能使它适用于两个或多个元素?我想我应该在结果列表中获取每个元素的边框。如何?
非常感谢任何帮助
JS:
function displayThese(selectorString) {
var $heading = $(selectorString);
var h1top = $heading.position().top;
var h1bottom = h1top + $heading.height();
var h1left = $heading.position().left;
var h1right = h1top + $heading.width();
var divs = $('li').filter(function () {
var $e = $(this);
var top = $e.position().top;
var bottom = top + $e.height();
var left = $e.position().left;
var right = left + $e.width();
return top > h1bottom || bottom < h1top || left > h1right || right < h1left;
});
return divs;
}
(function fadeInDiv() {
var divsToChange = displayThese('h1, div.logo');
var elem = divsToChange.eq(Math.floor(Math.random() * divsToChange.length));
if (!elem.is(':visible')) {
elem.prev().remove();
elem.animate({
opacity: 1
}, Math.floor(Math.random() * 1000), fadeInDiv);
} else {
elem.animate({
opacity: (Math.random() * 1)
}, Math.floor(Math.random() * 1000), function () {
window.setTimeout(fadeInDiv);
});
}
})();
$(window).resize(function () {
// Get items that do not change
var divs = $('li').not(displayThese());
divs.css({
opacity: 0.3
});
});
答案 0 :(得分:1)
首先,您应该在文档加载结束时执行fadeInDiv()函数,因为在您的小提琴中,位置计算为内联(所有'li'的顶部和底部相同)。
另一方面,当获取选择器的位置和尺寸时,它采用第一个元素的属性。所以它不适用于你的例子。您只需要传递一个元素。
你需要做的是迭代匹配selectorString的元素,过滤那些不在其后面的“li”元素列表。
function displayThese(selectorString) {
var divs = $('li');
// iterate through elements in selector filtering <li> elements
$(selectorString).each( function( index, value ) {
var $heading = $(this);
var h1top = $heading.position().top;
var h1bottom = h1top + $heading.height();
var h1left = $heading.position().left;
var h1right = h1top + $heading.width();
divs = divs.filter(function () {
var $e = $(this);
var top = $e.position().top;
var bottom = top + $e.height();
var left = $e.position().left;
var right = left + $e.width();
// return just the elements non touching the selectors
return !(top < h1bottom && bottom > h1top &&
left < h1right && right > h1left);
});
});
return divs;
}
在调整大小时,您必须停止当前动画并再次启动淡入淡出方法:
$(window).resize(function () {
$('li').stop();
$('li').css("opacity", "0.3");
fadeInDiv();
});
以下是此
的fiddle