javascript - 仅媒体查询未按预期运行

标签 javascript jquery html css

我正在尝试编写一些 jQuery 来响应我的 CSS 媒体专用查询。

我有在特定滚动点滑到网页上的对象。但为了保持对象响应,我需要使用媒体查询更改滚动点。

代码如下:

jQuery(window).scroll(function () {

            //media query scroll point @ min 768, max 995

            if (document.documentElement.clientWidth <= 995 && document.documentElement.clientWidth >= 768) {
                if (jQuery(this).scrollTop() > 400) {
                    if (jQuery('.rightSlideB').hasClass('visible') == false) {
                        jQuery('.rightSlideB').stop().animate({
                            right: '0px'
                        }, function () {
                            jQuery('.rightSlideB').addClass('visible')
                        });
                    }
                }
            } //end media query

            //default scroll point

            if (jQuery(this).scrollTop() > 250) {
                if (jQuery('.rightSlideB').hasClass('visible') == false) {
                    jQuery('.rightSlideB').stop().animate({
                        right: '0px'
                    }, function () {
                        jQuery('.rightSlideB').addClass('visible')
                    });
                }
            } //end default scroll point
        }); //end function

我的内容响应的媒体唯一屏幕是这样的:

@media only screen and (min-width: 768px) and (max-width: 995px) {}

不仅 jQuery 没有产生预期的效果,而且我的代码效率低得令人难以置信,主要 block 是:

if (jQuery('.rightSlideB').hasClass('visible') == false) {
                        jQuery('.rightSlideB').stop().animate({
                            right: '0px'
                        }, function () {
                            jQuery('.rightSlideB').addClass('visible')
                        });
                    }

正在重复。我该如何削减该部分,因为它会以任何方式在每个媒体查询中被回收。

编辑:我是否应该将该重复 block 放入一个函数中,然后每次都调用它?

我在这里错过了什么?谢谢。

最佳答案

也许您应该将默认 block 放在顶部(如果它适合大多数情况)以赋予其优先级。并向默认 block 添加一个 if 条件,这与您在媒体查询中所做的相反。最后用 if else 条件加入它们:

<div class="snippet" data-lang="js" data-hide="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code>jQuery(window).scroll(function () {
	if (document.documentElement.clientWidth > 995) {
		if (jQuery(this).scrollTop() > 250) {
			if (jQuery('.rightSlideB').hasClass('visible') === false) {
				jQuery('.rightSlideB').stop().animate({
					right: '0px'
				}, function () {
					jQuery('.rightSlideB').addClass('visible');
				});
			}
		}
	} else if (document.documentElement.clientWidth <= 995 && document.documentElement.clientWidth >= 768) {
		if (jQuery(this).scrollTop() > 400) {
			if (jQuery('.rightSlideB').hasClass('visible') === false) {
				jQuery('.rightSlideB').stop().animate({
					right: '0px'
				}, function () {
					jQuery('.rightSlideB').addClass('visible');
				});
			}
		}
	}
});</code></pre>
</div>
</div>

关于javascript - 仅媒体查询未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440084/

相关文章:

javascript - 如何在 Javascript 中镜像哈希功能?

javascript - jquery隐藏然后显示后,宽度为:auto elements is smaller than normal

html - 以正确的顺序绘制一系列等距敌人或处理脏矩形?

jquery 智能感知 vs2010 mvc3

jquery - 无法为 bxSlider 'next/prev' 控件设置图像

javascript - 加载内联 jQuery 脚本以及延迟和异步脚本

php - 使用选择框更新显示查询

javascript - 使用 Javascript 从字符串中提取 CSS 属性

javascript - 通过 jQuery 将 3 个下拉列表限制为 8 个

asp.net - 在 ASP.NET 中禁用时更改 RadCombobox 字体颜色