Ant*_*y_Z 9 html javascript css jquery jquery-ui
我有一个页面左侧有一个粘性图像侧边栏,右侧有不同高度的标签内容.我遇到的问题是,当选择了较短的标签时,粘性侧边栏会溢出它的容器.
单击选项卡2并向下滚动页面可以观察到此行为.左侧的图像不应溢出到页脚.选项卡1显示正确的行为.
这是一个代码示例:http://codepen.io/anon/pen/gayMjx
<section class="js-pin-container">
<div class="row">
<div class="left-col">
<div class="js-pin-content">
<img src="http://placehold.it/250x250">
</div>
</div>
<div class="right-col">
<div id="tabs">
<ul>
<li><a href="#tabs-1">tab 1</a></li>
<li><a href="#tabs-2">tab 2</a></li>
<li><a href="#tabs-3">tab 3</a></li>
</ul>
<div id="tabs-1">
<p style="background: silver; height: 900px;">This dive is 900px tall.</p>
</div>
<div id="tabs-2">
<p style="background: silver; height: 600px;">This dive is 600px tall.</p>
</div>
<div id="tabs-3">
<p style="background: silver; height: 1200px;">This dive is 1200px tall.</p>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
问题pin只是recalculateLimits在调整窗口大小时更新其limit(),而不是在容器内容发生更改时.您可以使用解决方法,因此每次打开新选项卡时都会window触发调整大小事件.换句话说,您可以tabs从以下位置更改插件的初始化:
$( "#tabs" ).tabs();
Run Code Online (Sandbox Code Playgroud)
至:
$( "#tabs" ).tabs({
activate:function(){
$(window).resize();
}
});
Run Code Online (Sandbox Code Playgroud)
在这里你去:http://codepen.io/anon/pen/OyYyag
按照@piyin 的回答,我建议不要window.resize()每次都引发该事件。
原因是,在现实世界中,您可能有多个附加到此事件的函数,并且您希望避免在每个选项卡开关上调用所有函数。
重新计算高度的更好方法是公开插件方法recalculateLimits并将其附加到activate事件:
工作示例:JSnippet 演示
暴露方法:
...
$window.resize(function () { recalculateLimits(); });
recalculateLimits();
//This line expose the method
this.recalculateLimits = recalculateLimits;
$window.load(update);
return this;
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
然后你可以只附加它:
$(function() {
//Attach pin:
var pinSide = $(".js-pin-content").pin({
containerSelector: ".js-pin-container"
});
//Create tabs:
$( "#tabs" ).tabs({
activate:function(){
pinSide.recalculateLimits();
}
});
Run Code Online (Sandbox Code Playgroud)
});