我正在构建一个使用 WordPress 和 Zurb Foundation 的自定义画廊:
- 该模板显示自定义帖子的分页存档;自定义查询使用链接缩略图网格填充页面。
- 使用 Foundation 4 中的 Reveal modal 插件以及 WordPress 的 AJAX 将内容附加到reveal-modal div。
- 单击模态窗口中的
.previous-sketch
,.next-sketch
链接将显示相应的相邻帖子。
我已经设法使上述工作正常进行,但发现在打开一个模式窗口并循环浏览帖子后,事情开始不同步。.reveal-modal-bg
显示模式窗口时不显示深色背景,并且事情的行为有些奇怪。
如果您对此问题有任何特别的见解,我提前感谢您。
更新:我能够在这方面做更多的工作,而且在大多数情况下它似乎工作。虽然我觉得我的解决方案不是最优雅的。
我的 jQuery 代码如下。
(function($) {
$.fn.displayPost = function() {
event.preventDefault();
var post_id = $(this).data("id");
var id = "#" + post_id;
// Check if the reveal modal for the specific post id doesn't already exist by checking for it's length
if($(id).length == 0 ) {
// We'll add an ID to the new reveal modal; we'll use that same ID to check if it exists in the future.
var modal = $('<div>').attr('id', post_id ).addClass('reveal-modal').appendTo('body');
var ajaxURL = MyAjax.ajaxurl;
$.ajax({
type: 'POST',
url: ajaxURL,
data: {"action": "load-content", post_id: post_id },
success: function(response) {
modal.empty().html(response).append('<a class="close-reveal-modal">×</a>').foundation('reveal', 'open');
modal.bind('opened', function() {
// Trigger window resize to reset the left margin.
$(window).trigger('resize');
var left;
left = Math.max($(window).width() - $(id).outerWidth(), 0) / 2;
$(id).css({
left:left + $(window).scrollLeft()
});
return false;
});
}
});
}
//If the div with the ID already exists we'll just open it.
else {
$(id).foundation('reveal', 'open');
}
// Recalculate left margin on window resize
$(window).resize(function(){
var left;
left = Math.max($(window).width() - $(id).outerWidth(), 0) / 2;
$(id).css({
left:left + $(window).scrollLeft()
});
});
}
})(jQuery);
// Apply the function when we click on the .reveal link
jQuery(document).on("click", ".reveal,.secondary", function() {
jQuery(this).displayPost();
});
// Use Reveal's built in function to close the div when we click our paging links
jQuery(document).on("click", ".secondary", function() {
var id = jQuery(this).closest("div").attr("id");
jQuery(id).foundation('reveal', 'close');
});