【问题标题】:jQuery Waypoints toggle sticky-wrapper heightjQuery Waypoints 切换粘性包装器高度
【发布时间】:2014-05-08 22:42:22
【问题描述】:

http://jsfiddle.net/Luter/

向下滚动页面时,会触发向上滑动,但粘性包装不会调整到向上滑动元素缺失的高度。停留在那里并阻止内容出现。如何根据向上滑动元素的高度调整粘性包装的高度?

http://jsfiddle.net/Luter/1/ 注释掉第一个 //$('.option-wrap').slideToggle(); (案例 b)单击菜单并向下滚动。这次的 Menu 元素只有在滚动超过 Header 高度时才具有粘性。同样,我如何调整缺少的 Header 的粘性包装高度,以便立即卡住菜单?

这两种情况是否与偏移或刷新粘性包装有关?我认为,由于 Waypoints 正确测量了整个菜单/窗口元素的初始状态的高度,因此即使选项部分向上滑动或隐藏标题时,粘性包装也会保持其高度。

我正在寻找一种根据选项元素或隐藏标题元素的滑动/可见/切换状态将较小的粘性包装高度传递给航点的方法。

我不知道如何将缺少的向上滑动或隐藏元素的高度传递给航点,以便内容始终在菜单下很好地流动。

我检查了tutsplusWaypoints DocsSticky Elementsstack different-offset-for-jquery-waypointstack 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%;
}

【问题讨论】:

标签: javascript jquery html css jquery-waypoints


【解决方案1】:

http://jsfiddle.net/Luter/5/

虽然我不确定 Waypoints 本身是否也能达到同样的效果。

如果您有更好/更好/更顺畅的解决方案,请告诉我。

谢谢。

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);

    }    
});

【讨论】:

  • 有一个更好的方法,我正在研究它。如果有人愿意提供反馈或帮助,我将不胜感激。谢谢。
  • 必须说,不确定是否由于上述链接问题,当使用粘性元素快捷方式时,可以使用粘性/卡住元素作为航点,因为粘性元素正在创建一个新元素。如果标题向上滑动,我正在尝试设置偏移量,并在标题再次显示时删除该偏移量。猜猜这最好用纯粹的航点而不是操纵粘性元素自动创建.sticky-wrapper?
【解决方案2】:

http://jsfiddle.net/Luter/8/

在不改变 CSS 的情况下更流畅!逻辑是在包裹元素的卡住状态之后进行,然后才将 .sticky-wrapper 设置为菜单高度,以避免来自菜单下的滑动选项元素的空间。他们滑动,但当然 .sticky-wrapper 并不关心他们是否这样做,并且像 Caleb 告诉它的那样做它的工作。因此需要将 .sticky-wrapper 的高度更改为菜单的高度。虽然只有在菜单包装元素具有卡住类时才应该这样做。

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');

当菜单通过航路点时,请告诉我。

非常欢迎对这种解决问题的方式提供任何反馈。谢谢。

【讨论】:

  • 必须说,不确定是否由于上述链接问题,当使用粘性元素快捷方式时,可以使用粘性/卡住元素作为航点,因为粘性元素正在创建一个新元素。如果标题向上滑动,我正在尝试设置偏移量,并在标题再次显示时删除该偏移量。猜猜这最好用纯路点而不是操纵粘性元素自动创建 .sticky-wrapper?
猜你喜欢
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2013-08-30
  • 2011-10-15
  • 1970-01-01
相关资源
最近更新 更多