在jQuery中匹配css媒体查询
Matching css media queries in jQuery
这是我昨天关于jQuery自动图像滑块的问题的延续,你可以在这里找到- jQuery自动图像滑块。
我已经在我的css中添加了几个媒体查询,并试图在javascript中使用'if/if else'语句来镜像它们,但目前它只适用于语句的第二部分。对于其他两张幻灯片,幻灯片似乎向左移动了620px,在框架中留下了另一张图片的一部分,但在最后一张幻灯片之后仍然重置为'margin: 0'。
在代码中也有很多重复,理想情况下我想摆脱,但当我尝试在'if'语句中只包括width变量时,代码没有运行。
我难住了!如有任何帮助,我将不胜感激。
$(document).ready(function() {
//INDEX IMAGES SLIDER
$(function() {
if($('#slider').width() > 760) {
//configuration
var width = 720;
var speed = 1000;
var pause = 2000;
var current = 1;
//cache DOM
var $slider = $('#slider');
var $slides = $slider.find('#slides');
var $slide = $slides.find('.slide');
setInterval(function() {
$slides.animate({'margin-left': '-='+width}, speed, function() {
current++;
if (current === $slide.length) {
current = 1;
$slides.css('margin-left', 0);
}
});
}, pause);
} else if($('#slider').width() <= 760) {
var width = 620;
var speed = 1000;
var pause = 2000;
var current = 1;
//cache DOM
var $slider = $('#slider');
var $slides = $slider.find('#slides');
var $slide = $slides.find('.slide');
setInterval(function() {
$slides.animate({'margin-left': '-='+width}, speed, function() {
current++;
if (current === $slide.length) {
current = 1;
$slides.css('margin-left', 0);
}
});
}, pause);
} else {
var width = 520;
var speed = 1000;
var pause = 2000;
var current = 1;
//cache DOM
var $slider = $('#slider');
var $slides = $slider.find('#slides');
var $slide = $slides.find('.slide');
setInterval(function() {
$slides.animate({'margin-left': '-='+width}, speed, function() {
current++;
if (current === $slide.length) {
current = 1;
$slides.css('margin-left', 0);
}
});
}, pause);
};
});
});
#slider {
width: 720px;
height: 400px;
overflow: hidden;
margin: 100px auto;
}
#slider #slides {
display: block;
width: 2880px;
height: 400px;
margin: 0;
padding: 0;
}
#slider .slide {
float: left;
list-style: none;
height: 400px;
width: 720px;
}
#slider .slide img {
width: 100%;
}
@media only screen and (max-width: 760px) {
#slider {
width: 620px;
}
#slider .slide {
width: 620px;
}
#slider .slide img {
width: 620px;
}
}
@media only screen and (max-width: 650px) {
#slider {
width: 520px;
}
#slider .slide {
width: 520px;
}
#slider .slide img {
width: 520px;
}
}
<div class="page-container">
<div id="slider">
<ul id="slides">
<li class="slide"><img src="images/sp_1.png"></li>
<li class="slide"><img src="images/ss_1.jpg"></li>
<li class="slide"><img src="images/sd_1.jpg"></li>
<li class="slide"><img src="images/sp_1.png"></li>
</ul>
</div>
</div>
你的代码存在根本缺陷;滑块的宽度永远不会超过720px,这就是为什么只有if
语句的第二个分支运行。您的最终else
将永远不会运行。
在重构代码方面,你可以这样做:
$(document).ready(function() {
//INDEX IMAGES SLIDER
$(function() {
var width;
var speed = 1000;
var pause = 2000;
var current = 1;
if ($('#slider').width() > 760) {
//configuration
width = 720;
} else if ($('#slider').width() <= 760) {
width = 620;
} else {
width = 520;
};
//cache DOM
var $slider = $('#slider');
var $slides = $slider.find('#slides');
var $slide = $slides.find('.slide');
setInterval(function() {
$slides.animate({
'margin-left': '-=' + width
}, speed, function() {
current++;
if (current === $slide.length) {
current = 1;
$slides.css('margin-left', 0);
}
});
}, pause);
});
});
谢谢Andrew的解决方案,真的很有帮助。我现在已经完全修复了代码,以便滑块在页面加载时工作,无论初始宽度如何,然后也响应窗口的大小调整。
我在下面贴出了新的代码。希望对大家有用!
$(document).ready(function() {
//INDEX IMAGES SLIDER
$(function() {
//configuration
var width = $('#slider').width(); //detect width of slider on page load
var speed = 1000;
var pause = 7000;
var current = 1;
//change value of 'width' to match image widths when media queries are triggered
$(window).resize(function() {
if ($('#slider').width() === 720) {
//configuration
width = 720;
} else if ($('#slider').width() === 620) {
width = 620;
} else {
width = 520;
};
});
//cache DOM
var $slider = $('#slider');
var $slides = $slider.find('#slides');
var $slide = $slides.find('.slide');
//move the images the defined width and speed to the left
setInterval(function() {
$slides.animate({'margin-left': '-='+width}, speed, function() {
current++;
if (current === $slide.length) {
current = 1;
$slides.css('margin-left', 0);
}
});
}, pause);
});
});
相关文章:
- 访问CSS媒体查询中的屏幕宽度和高度
- css媒体查询请求后刷新jQuery插件
- 自定义 CSS 媒体打印查询中的模式高度和宽度
- CSS 媒体查询 - 最小设备宽度和最大设备宽度
- CSS媒体以小册子形式打印文档
- jQuery下拉菜单和CSS媒体查询冲突
- 什么是CSS媒体查询的JavaScript等价物
- CSS 媒体查询以获取确切的视口宽度
- CSS 媒体查询和 jQuery window .width() 不匹配
- 使用 javascript 或 jQuery 添加 CSS 媒体查询
- 控制通过javascript应用哪些css媒体查询
- CSS媒体查询高度大于宽度,反之亦然(或如何使用JavaScript模仿)
- CSS 媒体查询不起作用
- 考虑CSS媒体查询加载和卸载JavaScript
- 如何使淘汰js模板css媒体查询意识
- 使用JS编辑CSS媒体查询
- 将jQuery.hide()与CSS媒体查询一起用于基于屏幕分辨率的菜单切换
- 如何将css媒体类型动态添加到页面中
- 在窗口上设置产品滑块宽度,同时调整CSS媒体查询的大小
- CSS媒体查询横向安卓软键盘