这个让我把头发扯掉了。
我已经搜索过了;尝试了我能找到的一切。
在functions.php中:
function masonry_scripts() {
wp_enqueue_script('jquery');
if(is_home()){
wp_enqueue_script('masonry', get_template_directory_uri() . '/js/masonry.pkgd.min.js');
wp_enqueue_script('infinite scroll', get_template_directory_uri() . '/js/infinite-scroll.js');
wp_enqueue_script('inf-mas-load', get_template_directory_uri() . '/js/masonry-reloader.js', array('jquery', 'masonry', 'infinite scroll'));
};
};
add_action( 'wp_enqueue_scripts', 'masonry_scripts' );
masonry~.js 和infinite-scroll.js 是它们各自站点上可用脚本的本地副本。
在 masonry-reloader.js 中:
jQuery(function($){
var $container = $('#items');
$container.imagesLoaded(function(){
$container.masonry({
itemSelector: '.item-wrap',
columnWidth: 472,
gutter: 12
});
});
$container.infinitescroll({
navSelector : '#pag.item-wrap', // selector for the paged navigation
nextSelector : '#pag.item-wrap .pagination ul.paglinks li#older', // selector for the NEXT link (to page 2)
itemSelector : '.item-wrap', // selector for all items you'll retrieve
loading: {
finishedMsg: 'No more pages to load.',
img: 'http://i.imgur.com/6RMhx.gif'
}
},
// trigger Masonry as a callback
function( newElements ) {
// hide new items while they are loading
var $newElems = $( newElements ).css({ opacity: 0 });
// ensure that images load before adding to masonry layout
$newElems.imagesLoaded(function(){
// show elems now they're ready
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true );
});
}
);
});
它只是没有任何影响 - 就像脚本没有运行一样。
检查元素显示所有脚本加载。masonry~.js 很好,因为如果我用 HTML 或 no-jQuery-js 初始化,就很好。
不过,我需要使用 jQuery,以便可以从无限滚动中追加新项目。
这并不是因为无限滚动不好 - 如果我减少我的 jQuery 来初始化 Masonry(就像在 HTML 中正常工作一样),它不会初始化。就好像它根本不存在一样。
我已经做了一个多星期了,我真的希望有人能发现我的(可能)愚蠢的错误——我觉得我已经尝试了这一切。