以下是我想要做的事情。我试图让我的网站上的图库更具可移植性,这样我就可以生成一个链接到我的项目页面,然后让Magnific Popup将该页面中的内容显示到滑块中。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中的项目,但我无法打开Lightbox。很明显,我在这里做错了什么。
$('.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中,它们不会在Lightbox中加载。但是,单击其中一个项目确实会将该项目加载到Lightbox中。所以这是一个问题,因为我希望灯箱在用户点击链接时打开。
另一个问题,我看到当我点击链接,我得到一个JavaScript错误。
Uncaught TypeError: Cannot read property 'parsed' of undefined
我要试验一些,但如果你们有其他一些想法我打开听到任何和所有的选项,建议。
你可以把这段代码放在小提琴上,让人们可以更好地理解问题吗? – Serendipity
嗯,我没有看到项目:在你的脚本。 http://codepen.io/dimsemenov/pen/zvLny – mehany
我想将它添加到jsfiddle或其他东西,但因为我需要做跨域调用,所以ajax将无法工作。任何建议可能白名单的域名? – Robbiegod