【问题标题】:How To Disable This JS Function In Responsive Designs如何在响应式设计中禁用此 JS 功能
【发布时间】:2014-10-22 02:59:53
【问题描述】:

我在我的博客http://www.helpitx.com 中使用了一个脚本,它使小部件浮动变得有粘性。目前我正在将此脚本用于导航菜单,但它破坏了专门针对屏幕高度小于 768 像素的移动设备的响应式设计布局,因为整个菜单没有显示在那里。 这是我正在使用的脚本。

<script>
/*<![CDATA[*/
// Sticky Plugin
// =============
// Author: Syed Faizan Ali
(function($) {
    var defaults = {
            topSpacing: 0,
            bottomSpacing: 0,
            className: 'is-sticky',
            center: false
        },
        $window = $(window),
        $document = $(document),
        sticked = [],
        windowHeight = $window.height(),
        scroller = function() {
            var scrollTop = $window.scrollTop(),
                documentHeight = $document.height(),
                dwh = documentHeight - windowHeight,
                extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
            for (var i = 0; i < sticked.length; i++) {
                var s = sticked[i],
                    elementTop = s.stickyWrapper.offset().top,
                    etse = elementTop - s.topSpacing - extra;
                if (scrollTop <= etse) {
                    if (s.currentTop !== null) {
                        s.stickyElement.css('position', '').css('top', '').removeClass(s.className);
                        s.currentTop = null;
                    }
                }
                else {
                    var newTop = documentHeight - s.elementHeight - s.topSpacing - s.bottomSpacing - scrollTop - extra;
                    if (newTop < 0) {
                        newTop = newTop + s.topSpacing;
                    } else {
                        newTop = s.topSpacing;
                    }
                    if (s.currentTop != newTop) {
                        s.stickyElement.css('position', 'fixed').css('top', newTop).addClass(s.className);
                        s.currentTop = newTop;
                    }
                }
            }
        },
        resizer = function() {
            windowHeight = $window.height();
        };
    // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
    if (window.addEventListener) {
        window.addEventListener('scroll', scroller, false);
        window.addEventListener('resize', resizer, false);
    } else if (window.attachEvent) {
        window.attachEvent('onscroll', scroller);
        window.attachEvent('onresize', resizer);
    }
    $.fn.sticky = function(options) {
        var o = $.extend(defaults, options);
        return this.each(function() {
            var stickyElement = $(this);
            if (o.center)
                var centerElement = "margin-left:auto;margin-right:auto;";
            stickyId = stickyElement.attr('id');
            stickyElement
                .wrapAll('<div id="' + stickyId + 'StickyWrapper" style="' + centerElement + '"></div>')
                .css('width', stickyElement.width());
            var elementHeight = stickyElement.outerHeight(),
                stickyWrapper = stickyElement.parent();
            stickyWrapper
                .css('width', stickyElement.outerWidth())
                .css('height', elementHeight)
                .css('clear', stickyElement.css('clear'));
            sticked.push({
                topSpacing: o.topSpacing,
                bottomSpacing: o.bottomSpacing,
                stickyElement: stickyElement,
                currentTop: null,
                stickyWrapper: stickyWrapper,
                elementHeight: elementHeight,
                className: o.className
            });
        });
    };
})(jQuery);
/*]]>*/
</script>

<script type='text/javascript'>
   $(document).ready(function(){
    $(&quot;#mblfloater&quot;).sticky({topSpacing:0});
   });
</script>

我已将导航菜单包含在标签中。该脚本运行良好,但我想在屏幕宽度小于 768 的移动设备中禁用它。如何实现?

【问题讨论】:

    标签: javascript jquery css responsive-design


    【解决方案1】:
    <script type='text/javascript'>
       $(document).ready(function(){
        if ($(window).width() >= 768) {
            $("#mblfloater").sticky({topSpacing:0});
        }
       });
    </script>
    

    仅当窗口宽度大于或等于(即不小于)768 时才运行脚本。

    【讨论】:

    【解决方案2】:

    使用CSS media query隐藏菜单。

    例如:

    <style>
    @media (max-width: 600px) {
      #mblfloater {
        display: none;
      }
    }
    </style>
    

    【讨论】:

    • 我先尝试了这个,但它隐藏了整个导航菜单,而不是仅阻止粘滞功能。
    【解决方案3】:

    当你使用 jQuery 时:

    if($(window).outerWidth() < 768){
       //disable your code here
    }
    

    【讨论】:

    • 实际上我是 javascript 新手,不知道这个脚本背后的工作原理。无论如何,如果我使用它,我该怎么做才能禁用代码?
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2012-10-25
    • 2011-12-31
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多