【发布时间】:2015-04-06 15:48:41
【问题描述】:
这就是我想要做的。我正在尝试使我在我的网站上拥有的画廊更便携,以便我可以生成指向我的项目页面的链接,然后让 Magnific Popup 将该页面中的内容显示到滑块中。
如果所有元素都在此页面上,我希望像这样工作
让我们看一些代码,首先,我有一个链接到项目页面的文本链接:
<a href="http://domain.com/projects/my-project-template/" class="external-media">View Project</a>
如果您访问项目模板,您将看到工作示例的轮播。但是,如果单击带有类 .external-media 的链接,jquery 应该接管并将此页面中的项目加载到宏伟的弹出窗口中。
我有 html 格式的数据输出,我也尝试过 json。 html结构如下:
<div id="gallery">
<a href="photo1.jpg" title="" class="gallery-item" data-effect="mfp-move-horizontal"><img src="/thumbnail1.jpg" alt="" class="standard-image"></a>
<a href="photo2.jpg" title="" class="gallery-item" data-effect="mfp-move-horizontal"><img src="/thumbnail2.jpg" alt="" class="standard-image"></a>
<a href="photo3.jpg" title="" class="gallery-item" data-effect="mfp-move-horizontal"><img src="/thumbnail3.jpg" alt="" class="standard-image"></a>
<a href="photo4.jpg" title="" class="gallery-item" data-effect="mfp-move-horizontal"><img src="/thumbnail4.jpg" alt="" class="standard-image"></a>
</div>
然后我的 javascript 看起来像这样,我试图使用 ajax 类型。
jQuery('.external-media').magnificPopup({
type: 'ajax',
modal: false,
gallery: {
enabled: true,
navigateByImgClick: true,
preload: [0,1]
},
image: {
tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
titleSrc: function(item) {
return item.el.attr('title');
}
},
callbacks: {
parseAjax: function(mfpResponse) {
mfpResponse.data = jQuery(mfpResponse.data).find('#gallery');
console.log('Ajax content loaded:', mfpResponse);
},
ajaxContentAdded: function() {
$('#gallery').magnificPopup({
type: 'image',
delegate: 'a',
gallery: {
enabled: true,
tPrev: 'previous',
tNext: 'next',
tCounter: '%curr% of %total%'
},
image: {
verticalFit: true,
titleSrc: function (item) {
return item.el.attr('title') + ' · <a class="image-source-link" href="' + item.src + '" target="_blank"><i class="fa fa-file-image-o"></i> open original</a>';
}
},
});
console.log(this.content);
}
}
});
现在当我单击文本链接时会发生什么,它会在灯箱中显示堆叠在每个顶部的所有 4 个图像。我想用左右箭头在幻灯片中一次显示一个。
基本上,如果所有元素都在同一个页面上,它看起来完全一样。
有人知道如何从外部来源加载图像并在幻灯片中填充灯箱吗?
===
我现在正在探索其他一些选择,因为你们中的一些人提出了一些想法。这是我得到的,但它似乎不起作用。我认为它现在是一个半解决方案。我有一个点击功能,可以从永久链接页面中获取内容并将其加载到当前页面模板上的 div 中。单击链接后,我可以看到内容 div 中的项目,但无法打开灯箱。显然我在这里做错了什么。
$('.external-media').click(function( event ) {
event.preventDefault();
var href = jQuery(this).attr('href') + ' #gallery';
var items = [];
$.ajax({
url: href,
type:'GET',
success: function(data){
$('#content').html(
$(data).find('.slide').each(function() {
items.push({
src: $(this)
});
})
);
}
});
$.magnificPopup.open({
type: 'inline',
gallery: {
enabled: true,
tPrev: 'previous',
tNext: 'next',
tCounter: '%curr% of %total%'
}
}); // close mpopup
}); // close click
当我单击此功能时,我看到了两件事。我看到项目出现在 div 中,它们没有加载到灯箱中。但是,单击其中一个项目会将该项目加载到灯箱中。所以这是一个问题,因为我希望在用户单击链接时打开灯箱。
当我单击链接时看到的另一个问题是出现 javascript 错误。
Uncaught TypeError: Cannot read property 'parsed' of undefined
我将尝试更多,但如果你们有其他想法,我愿意听取任何和所有选项和建议。
【问题讨论】:
-
你能把这段代码放在一个小提琴上,以便人们更好地理解这个问题吗?
-
嗯,我没有看到项目:在你的脚本中。 codepen.io/dimsemenov/pen/zvLny
-
我想将它添加到 jsfiddle 或其他东西中,但由于我需要进行跨域调用,所以 ajax 将无法工作。有什么建议可以将域名列入白名单?
标签: jquery ajax magnific-popup