响应问题 jQuery 单击滑块
responsive issue jquery click slider
我有一个点击幻灯片,可以来回浏览图像,但是它在较小的窗口上不会缩放或响应,因为显然宽度绝对是用 CSS 中的像素和我的函数中的变量设置的。
如果我更改它,我不确定它将如何工作,因为它在每个 img 的宽度(607px)上来回滑动
有人有想法吗??还是更好的方法??
.HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="slider">
<ul class="slides">
<li class="slide"><img src="images/banner1.jpg" class="img-responsive"></li>
<li class="slide"><img src="images/banner2.jpg" class="img-responsive"></li>
<li class="slide"><img src="images/banner3.jpg" class="img-responsive"></li>
<li class="slide"><img src="images/banner1.jpg" class="img-responsive"></li>
</ul>
</div>
.CSS:
#slider {
width: 607px;
height: 248px;
overflow: hidden;
}
#slider .slides {
display: block;
width: 6000px;
height: 248px;
margin: 0px;
padding: 0px;
}
#slider .slide {
float: left;
list-style-type: none;
}
.JS:
(function() {
var width = 607;
var slideSpeed = 300;
var currentSlide = 1;
var $slider = $('#slider');
var $slideContainer = $slider.find('.slides');
var $slides = $slideContainer.find('.slide');
var totalLength = $slides.length;
$('#button-next').on('click', function(){
$slideContainer.animate({'margin-left': '-='+width}, slideSpeed, function(){
currentSlide++;
if(currentSlide === $slides.length) {
currentSlide = 1;
$slideContainer.css('margin-left', '0');
}
});
});
$('#button-prev').on('click', function(){
if(currentSlide === 1) {
var pos = -1 * (width * ($slides.length -1));
$slideContainer.css('margin-left', pos);
$slideContainer.animate({'margin-left': '+='+width}, slideSpeed);
currentSlide = $slides.length - 1;
} else {
$slideContainer.animate({'margin-left': '+='+width}, slideSpeed);
currentSlide--;
}
});
});
为了使您发布的滑块具有响应性,您需要将 CSS 中的固定尺寸设置为流体宽度。
喜欢这个:
.slider {
position: relative;
padding: 10px;
}
.slider-frame {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
white-space: nowrap;
}
.slide {
width: 100%;
display: inline-block;
}
.control {
width: 49%;
}
A 编写了一个非常简单的演示滑块,几乎没有任何功能,只是为了达到这个解释的目的:
http://codepen.io/nicholasabrams/pen/aOLoYM
调整屏幕大小。幻灯片保持屏幕宽度,因为 .slide 和 .slider 都设置为屏幕宽度的 100%。
不要忘记为下一个和上一个添加您自己的功能,根据滑块中幻灯片的宽度调整每个幻灯片的进度距离。
另请参阅此处:
如何使图像滑块响应?
这是一个很好的教程,使用了一些高质量的代码。幻灯片也可以使用!
http://www.barrelny.com/blog/building-a-jquery-slideshow-plugin-from-scratch/
希望这有帮助!
更新:
由于OP指出问题出在js上,我挖出了我不久前写的一个简单的滑块,这里是javascript/jQuery:
$(function(){
$.fn.someCustomSlider = function (autoplay, velocity){
var sliderProps = [
// props n methods, accessible through data-slider-* attributes
{
settings : {
invokeBecause : $('[data-widget~="slider"]'),
autoplay : autoplay,
speed : velocity,
},
bindings : {
slideRail : $('[data-function~="slide-rail"]'),
nextButton : $('[data-function~="next"]'),
prevButton : $('[data-function~="prev"]'),
playButton : $('[data-function~="play"]'),
pauseButton : $('[data-function~="pause"]'),
stopButton : $('[data-function~="stop"]')
// attach this functionality to the DOM
},
methods : {
slideNext : function(){ slideRail.animate({left: '-=100%'}, velocity) },
slidePrev : function(){ slideRail.animate({left: '+=100%'}, velocity) },
slideRestart : function(){ slideRail.animate({left: '0%'}, velocity) },
pause : function(){ window.sliderTimer = setInterval(slideNext, velocity) }
}
}
]
$.each(sliderProps, function(){
// iterate through all of the slider objects properties
window.SliderProps = this;
// set slider props to be accessible to the global scope
});
// slider props stored as vars
var slideRail = SliderProps.bindings.slideRail;
var play = SliderProps.bindings.playButton;
var next = SliderProps.bindings.nextButton;
var prev = SliderProps.bindings.prevButton;
var pause = SliderProps.bindings.pauseButton;
var stop = SliderProps.bindings.stopButton;
var i = 0;
function slideNext(){
var slideNext = SliderProps.methods.slideNext();
}
function slidePrev(){
var slidePrev = SliderProps.methods.slidePrev();
}
function slideStop(){
/*slideRail.stop(); */
window.clearInterval( sliderTimer )
}
function slideRestart(){
var slidePrev = SliderProps.methods.slideRestart();
slideRail.stop();
window.clearInterval( sliderTimer )
}
function autoPlay(){
SliderProps.methods.pause()
}
// elemen -> event delegation -> function()
next.click(slideNext)
prev.click(slidePrev)
stop.click(slideRestart)
pause.click(slideStop)
play.click(autoPlay)
} // close function slider()
someCustomSlider(true, 1000);
});
http://codepen.io/anon/pen/eytrh
这是我最终扩展的基本版本,但为了简单起见,我想这应该是完美的。
在使用响应式设计时,从像素的角度思考是一种不好的做法。
为您的滑块和每张幻灯片提供 100vw 而不是 607px 的宽度。这将使它等效于一个"视口宽度"。在你的JavaScript中,尝试将width
变量修改为字符串100vw。确保包括该单元。
有关 CSS 单元的更多信息,请参阅此处。
- 单击jquery清除输入值
- 单击jQuery会激发两次
- 当链接单击-jQuery时,第二层下拉列表将隐藏
- 每次单击JQuery时旋转图像
- 单击jquery确认按钮后,处理到mvc操作
- 在窗体内部单击jQuery句柄按钮
- 单击JQuery设置布尔标志
- 右键单击Jquery菜单don'函数重写表后无法工作
- 如果多次单击jquery
- 单击Jquery中弹出的事件
- .单击Jquery/Javascript不工作
- 在单击 jQuery 事件中找不到变量
- 单击Jquery而不是悬停
- 如何根据单击Jquery的父级打开链接
- 单击“jQuery”中的函数冲突
- 图像交换单击jquery,3张图像
- 当单击jquery-ui选项卡时,我需要运行一个函数,我做错了什么
- 在第二次单击jquery时运行.animate的反向操作
- 选择日期时间选择器在单击JQuery UI对话框时消失
- 是否可以组合“打开”和“单击”jquery 函数