砌体无限滚动附加html5视频重叠
我目前正在使用imagesLoaded
检查图像是否已加载然后调用的库masonry
。
但它不适用于 html5 视频标签,因为这些视频彼此重叠。
所以我在初始加载时将调用masonry
从更改document.ready
为window.load
并删除了调用,imagesLoaded
即从此
$(document).ready(function(){
var $container = $('#media');
// layout Masonry again after all images have loaded
$container.imagesLoaded( function() {
$container.masonry({
"columnWidth": "." + "col-sm-2",
itemSelector: '.item',
gutter: 0,
});
$('.item').css('opacity', '1.0');
});
});
对此
$(window).load(function(){
var $container = $('#media');
$container.masonry({
"columnWidth": "." + "col-sm-2",
itemSelector: '.item',
gutter: 0,
});
$('.item').css('opacity', '1.0');
});
现在html5 videos
inmasonry
没有重叠,并且在页面的第一次加载时完美呈现initial load
,但由于我也在使用infinite-scroll
它在向下滚动页面时添加更多images/videos
内容,因此当新视频被添加到容器时它们被重叠,这种行为是由早期引起的masonry
在加载所有视频元素之前运行,因为imagesloaded
无法检查videos loaded
.
这是代码。
$(document).ready(function(){
var $container = $('#media');
var no_more_media = "<?= Lang::get('lang.no_more_to_load') ?>";
var loading_more_media = "<?= Lang::get('lang.loading_more_media') ?>";
$container.imagesLoaded(function(){
$container.masonry();
});
$container.infinitescroll({
loading: {
finished: undefined,
finishedMsg: "<p>" + no_more_media + "</p>",
img: "data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==",
msg: null,
msgText: "<div class='loading'><i></i><i></i><i></i></div><p>" + loading_more_media + "</p>",
selector: null,
speed: 'fast',
start: undefined,
},
navSelector : "ul.pagination",
// selector for the paged navigation (it will be hidden)
nextSelector : "ul.pagination a:first",
// selector for the NEXT link (to page 2)
itemSelector : ".container #media .item",
animate: false,
bufferPx: 160,
},
function( newElements ) {
// hide new items while they are loading
//var $newElems =
$.each($(newElements), function(index, value){
item_click_events($(value));
});
$( newElements ).css({ opacity: 0 });
$(newElements).imagesLoaded(function(){
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
}
);
});
});
我也尝试过在上面的代码中进行更改document.ready
,window.load
并完全删除运行imagesloaded
,但它不适用于infinitescroll
.,
例如修改代码
$(window).load(function(){
var $container = $('#media');
var no_more_media = "<?= Lang::get('lang.no_more_to_load') ?>";
var loading_more_media = "<?= Lang::get('lang.loading_more_media') ?>";
$container.masonry();
$container.infinitescroll({
loading: {
finished: undefined,
finishedMsg: "<p>" + no_more_media + "</p>",
img: "data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==",
msg: null,
msgText: "<div class='loading'><i></i><i></i><i></i></div><p>" + loading_more_media + "</p>",
selector: null,
speed: 'fast',
start: undefined,
},
navSelector : "ul.pagination",
// selector for the paged navigation (it will be hidden)
nextSelector : "ul.pagination a:first",
// selector for the NEXT link (to page 2)
itemSelector : ".container #media .item",
animate: false,
bufferPx: 160,
},
function( newElements ) {
// hide new items while they are loading
//var $newElems =
$.each($(newElements), function(index, value){
item_click_events($(value));
});
$( newElements ).css({ opacity: 0 });
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
});
});
还有另一种方法可以解决这个重叠问题,通过指定视频宽度和高度,但作为其响应式设计,指定视频宽度和高度会破坏响应能力。
所以我的问题是,是否有任何类似于 imagesloaded 的 js 库来确保所有视频都已加载,然后我可以调用 masonry ?或者我怎样才能确保视频不会overlapped
播放infinitescroll
?
更新 1:
我尝试了很多技术,用于无限滚动
$(newElements).load(function(){
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
});
页面滚动后不加载新内容。
$(window).load(function(){
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
});
页面滚动后不加载新内容。
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
重叠视频内容
所以我想出infinite-scroll
早点打电话并减慢container.masonry
3 秒的速度,这目前工作得很好。但仍在等待适当的解决方案。
例如
bufferPx: 700,
setTimeout(function(){
var $newElems = $( newElements );
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true);
}, 3000);
以上是将正在运行的砌体延迟 3 秒。
我尝试寻找类似window.load
for的东西div
,但没有,所以我最好的选择是检查所有videos
and是否images
已加载,然后在调用masonry
后调用infinite-scroll
添加了工作演示http://plnkr.co/edit/46YzHBJ7eFAXfsPqZB1q 您可以通过单击运行并向下滚动来查看问题。