我正在尝试做同样的事情: Formatting a title for FancyBox
问题是我使用的是FancyBox版本2.0.6,它与其他主题中解释的版本不同
/*
* Title helper
*/
F.helpers.title = {
beforeShow: function (opts) {
var title, text = F.current.title;
if (text) {
title = $('<div class="fancybox-title fancybox-title-' + opts.type + '-wrap">' + text + '</div>').appendTo('body');
if (opts.type === 'float') {
//This helps for some browsers
title.width(title.width());
title.wrapInner('<span class="child"></span>');
//Increase bottom margin so this title will also fit into viewport
F.current.margin[2] += Math.abs(parseInt(title.css('margin-bottom'), 10));
}
title.appendTo(opts.type === 'over' ? F.inner : (opts.type === 'outside' ? F.wrap : F.skin));
}
}
};
你能帮帮我吗?我试着添加行temp = title.split('|');如果{临时[1] = “”}(温度[1]!);在if(文本)之后但它打破了一切......:P
答案 0 :(得分:4)
使用 Fancybox v2.x ,您可以在触发fancybox的锚点之后立即将title
设置为分隔(隐藏)<div>
:
<a class="fancybox" href="images/01.jpg">open image</a>
<div style="display: none;"><!-- my title for fancybox above-->
<p>Line 1</p>
<p>line 2 with <a href="#nogo">link</a></p>
</div>
通过这种方式,您可以拥有更复杂的title
,其中包含许多行和html内容。然后你可以使用一个更简单的脚本:
$(document).ready(function() {
$(".fancybox").fancybox({
helpers : {
title : { type : 'inside' }
}, // helpers
/* the following option works fine until version v2.0.5 or below */
// afterLoad: function(){
// this.title = '<div class="myTitle">'+$(this.element).next('div').html()+'</div>';
// }
/* the following option should be set for version v2.0.6+ */
beforeShow: function(){
this.title = '<div class="myTitle">'+$(this.element).next('div').html()+'</div>';
}
}); // fancybox
}); // ready
您还可以为title
:
.myTitle {background-color: #fff; padding: 5px;}
.myTitle p {line-height: 16px; font-size: 12px; padding: 0; margin: 0;}
/* if you want the title stick to the image in fancybox */
.fancybox-title-inside-wrap {margin-top: 0 !important;}
使用此方法,您不必弄乱fancybox js / css文件。此外,更少的javascript意味着更少的CPU开销,不必要的拆分,大小计算,包装等。
问题:如果我有一个以上的图片(图库)怎么办?
回答:对html中的每个图片执行相同的操作,如:
<a class="fancybox" rel="gallery" href="images/01.jpg">open image 1</a>
<div style="display: none;"><!-- my title for fancybox above-->
<p>Line 1</p>
<p>line 2 with <a href="#nogo">link</a></p>
</div>
<a class="fancybox" rel="gallery" href="images/02.jpg">open image 2</a>
<div style="display: none;"><!-- my second title -->
<p>Line 1 for second image title</p>
<p>line 2 with <a href="#nogo">link</a></p>
<p>a third line here, why not?</p>
</div>
等。 ...并使用相同的脚本。
注意:OP评论道:
如果我点击上一个或下一个按钮,标题就会消失。
对于fancybox v2.0.6,我们需要使用选项title
构建beforeShow
,而不是afterLoad
,所以这一行:
afterLoad: function(){
this.title = '<div class="myTitle">'+jQuery(this.element).next('div').html()+'</div>';
}
应该是(从v2.0.6开始):
beforeShow: function(){
this.title = '<div class="myTitle">'+jQuery(this.element).next('div').html()+'</div>';
}