向下滚动页面时,会向上滑动,但粘性包装不会调整到滑动元素的缺失高度。留在那里并保持内容不会出现。如何根据滑动元素的高度调整粘性包装纸的高度?
http://jsfiddle.net/Luter/1/ 注释掉第一个// $(' .option-wrap')。slideToggle(); (案例b)单击“菜单”并向下滚动。这次的Menu元素只有在滚动超过Header高度时才会粘滞。同样,我如何调整丢失的标题的粘性包装高度,以便菜单立即被卡住?
这两种情况是否与偏移或刷新粘性包装有关?我认为,由于Waypoints正确地测量整个Menu / window元素的初始状态的高度,所以即使在Options部分滑动或者隐藏Header时,粘性包装也会保持其高度。
我正在寻找一种方法,根据Options元素或隐藏Header元素的slide / visible / toggle状态将较小的粘性包装高度传递给Waypoints。
我无法绕过如何将滑动或隐藏元素的缺失高度传递给Waypoints,以便内容始终很好地在菜单下流动。
我已经检查了tutsplus,Waypoints Docs,Sticky Elements,stack different-offset-for-jquery-waypoint,stack how-to-make-jquery-waypoints-plugin-fire-when并尝试了许多不同的组合,但却没有达到目标。
你能帮帮我吗?感谢您的时间,我非常重视Waypoints插件,并且在您的帮助下学会正确使用它会很棒。谢谢。HTML
<div id='header'>HEADER</div>
<div id='menu-wrap'>
<div id='menu'>MENU</div>
<div class='option-wrap'>
<div id='opt1'>OPTION 1</div>
<div id='opt2'>OPTION 2</div>
<div id='opt3'>OPTION 3</div>
<div id='opt4'>OPTION 4</div>
</div>
</div>
<div id='content'>CONTENT</div>
的jQuery
$('#menu-wrap').waypoint('sticky');
$(function() {
$('#menu').waypoint(
function() {
console.log("Waypoint reached.");
//case b
//$('.option-wrap').slideToggle();
}
)
});
$("#menu").click(function(){
$('.option-wrap').slideToggle();
$('#header').slideToggle('slow');
});
CSS
#header, #menu, #opt1, #opt2, #opt3, #opt4, #opt5, #content {
width: 100%;
line-height: 2em;
font-size: 200%;
text-align: center;
}
#header {
background: #e74c3c;
}
#menu {
background: #2ecc71;
}
#opt1 {
background: #f39c12;
}
#opt2 {
background: #9b59b6;
}
#opt3 {
background: #95a5a6;
}
#opt4 {
background: #34495e;
}
#content {
background: #2980b9;
height: 1000px;
}
#menu-wrap.stuck {
position: fixed;
top: 0;
width: 100%;
}
答案 0 :(得分:0)
虽然我不确定Waypoint本身是否可以实现同样的效果。
如果你有更好/更好/更顺畅的解决方案,请告诉我。
谢谢。
var menuWrapHeight = $('#menu-wrap').outerHeight();
console.log (menuWrapHeight);
var menuHeight = $('#menu').outerHeight();
console.log (menuHeight);
var optionWrapHeight = $('.option-wrap').outerHeight();
console.log (optionWrapHeight);
$('#menu-wrap').waypoint('sticky');
$(function() {
$('#menu').waypoint(
function() {
console.log("Waypoint reached.");
//$('.option-wrap').slideToggle();
var optionWrapHeight = $('.option-wrap').outerHeight();
console.log (optionWrapHeight);
var newStickyWrapperHeight = menuWrapHeight - optionWrapHeight;
console.log ('newStickyWrapperHeight', newStickyWrapperHeight);
$('.sticky-wrapper').css('height', newStickyWrapperHeight);
}
)
});
$('#menu').click(function(){
$('.option-wrap').slideToggle().toggleClass('opened');
var isVisible = $( '.option-wrap' ).is( ".opened" );
// var menuWrapHeight = $('#menu-wrap').outerHeight();
if (isVisible === true ){
var newStickyWrapperHeight = menuWrapHeight + optionWrapHeight;
$('.sticky-wrapper').css('height', newStickyWrapperHeight);
}
else {
var newStickyWrapperHeight = menuHeight;
$('.sticky-wrapper').css('height', newStickyWrapperHeight);
}
});
答案 1 :(得分:0)
在不改变CSS的情况下更顺畅!逻辑是追踪被包裹元素的卡住状态,然后将.sticky-wrapper设置为菜单高度,以避免来自Menu下滑动Options元素的空间。他们滑动但当然.sticky-wrapper并不关心他们是否这样做并且像Caleb那样做它的工作。因此需要将.sticky-wrapper的高度更改为Menu的高度。虽然只有当Menu包装元素具有卡住的类时才应该这样做。
var menuHeight = $('#menu').outerHeight();
console.log (menuHeight);
$('#menu-wrap').waypoint('sticky');
$('#menu').click(function(){
$('.option-wrap').slideToggle();
if ( $('#menu-wrap').hasClass('stuck')) {
console.log('stuck');
console.log ('.sticky.wrapper height stuck before change:', $('.sticky-wrapper').height());
$('.sticky-wrapper').css('height', menuHeight);
console.log ('.sticky.wrapper height stuck after change:', $('.sticky-wrapper').height());
}
});
如果,这也可以通过
以某种方式实现$.waypoints('refresh');
当菜单通过航点时,请告诉我。
非常欢迎任何以这种方式解决问题的反馈。谢谢。