jquery 图片滑块的问题
Problems with jquery image slider
我一直在尝试使用 jQuery 创建一个简单的图像滑块,但 next/previous 按钮却成了问题。我不知道如何防止因向它们发送垃圾邮件或按得太快而引起的各种错误和故障。这是代码
http://jsfiddle.net/6tkquyn1/2/ ...有人可以帮忙吗?
HTML
<div id="slider">
<div id="arrowleft" class="slidernav"></div>
<div id="arrowright" class="slidernav"></div>
<img class="slide" id="slide1" src="http://s27.postimg.org/rquk1bk37/slide1.jpg">
<img class="slide" id="slide2" src="http://s3.postimg.org/5baw2ey6b/slide2.jpg">
<img class="slide" id="slide3" src="http://s18.postimg.org/jej03064p/slide3.jpg">
<img class="slide" id="slide4" src="http://s22.postimg.org/ubbx4ev4h/slide4.jpg">
CSS
*{
magin: 0px;
padding: 0px;
}
#slider
{
height: 350px;
width: 700px;
border: solid black 2px;
position: relative;
}
.slide
{
position: absolute;
overflow: hidden;
display: none;
}
.slidernav
{
z-index: 999;
opacity: 0;
position: absolute;
cursor: pointer;
transition: .5s;
}
.slidernav:hover
{
opacity: 0.8;
}
#arrowright
{
height: 350px;
width: 70px;
right: 0;
background-image: url(http://s1.postimg.org/hx6atzftb/arrowright.png);
}
#arrowleft
{
height: 350px;
width: 70px;
left: 0;
background-image: url(http://s22.postimg.org/5fn2unxu9/arrowleft.png);
}
JS
$(document).ready(function(){
$("#slide1").show("fade",800);
var interval;
var counter = 1;
var slideNumber = $("#slider img").size();
function startSlider () {interval = setInterval(function(){
$("#slide"+counter).hide("slide",{direction:"left"},800);
if(counter==slideNumber){counter = 1;}
else{counter = counter+1;}
$("#slide"+counter).show("slide",{direction:"right"},800);},4800);}
startSlider();
function pauseSlider() {clearInterval(interval);}
$(".slide").on("mouseover", pauseSlider).on("mouseleave", startSlider);
$('#arrowleft').click(
function () {
$('.slide').queue();
pauseSlider();
$('#slide'+ counter).hide("slide",{direction: "right"},800);
if(counter==1){counter = slideNumber;}
else{counter = counter-1;}
$('#slide'+ counter).show("slide",{direction: "left"},800);
startSlider();
});
$('#arrowright').click(
function () {
$('.slide').queue();
pauseSlider();
$('#slide'+ counter).hide("slide",{direction: "left"},800);
if(counter == slideNumber){counter = 1;}
else{counter = counter+1;}
$('#slide'+ counter).show("slide",{direction: "right"},800);
startSlider();
});
});
尝试在 css
中使用以下内容
`*{
保证金:0px;
填充:0px;
}
#slider
{
height: 350px;
width: 700px;
border: solid black 2px;
position: relative;
}
.slide
{
position: absolute;
overflow: hidden;
display: none;
}
.slidernav
{
z-index: 999;
opacity: 0;
position: absolute;
cursor: pointer;
transition: .5s;
}
.slidernav:hover
{
opacity: 0.8;
}
#arrowright
{
height: 350px;
width: 70px;
left:440px;
background-image: url(http://s1.postimg.org/hx6atzftb/arrowright.png);
}
#arrowleft
{
height: 350px;
width: 70px;
left: 0;
background-image: url(http://s22.postimg.org/5fn2unxu9/arrowleft.png);
}`
我刚刚在#arrowright 中用 "left: 440px;" 替换了 "right: 0;"。现在正在运行。
好的,您可以通过测试查看上一张幻灯片是否已完全移出视图来解决此问题。您可以使用 jQuery: $(...).is(':visible') 进行测试。此处对您的原始代码进行了一些更改:
1) 现在有一个 lastCounter,它在允许用户更改幻灯片之前跟踪需要隐藏的幻灯片。每当有幻灯片转换时都会更新。
2) 幻灯片更改回调现在会在允许用户再次更改图像之前检查动画是否完成。
$(document).ready(function () {
$("#slide1").show("fade", 800);
var interval;
var counter = 1;
var lastCounter = 2;
var slideNumber = $("#slider img").size();
function startSlider() {
interval = setInterval(function () {
$("#slide" + counter).hide("slide", { direction: "left" }, 800);
lastCounter = counter;
if (counter == slideNumber) {
counter = 1;
} else {
counter = counter + 1;
}
$("#slide" + counter).show("slide", { direction: "right" }, 800);
}, 4800);
}
startSlider();
function pauseSlider() {
clearInterval(interval);
}
$(".slide").on("mouseover", pauseSlider).on("mouseleave", startSlider);
$('#arrowleft').click(function() {
if ($('#slide' + lastCounter).is(":visible")) {
return;
}
$('.slide').queue();
pauseSlider();
$('#slide' + counter).hide("slide", { direction: "right" }, 800);
lastCounter = counter;
if (counter == 1) {
counter = slideNumber;
} else {
counter = counter - 1;
}
$('#slide' + counter).show("slide", { direction: "left" }, 800);
startSlider();
});
$('#arrowright').click(function() {
if ($('#slide' + lastCounter).is(":visible")) {
return;
}
$('.slide').queue();
pauseSlider();
$('#slide' + counter).hide("slide", { direction: "left" }, 800);
lastCounter = counter;
if (counter == slideNumber) {
counter = 1;
} else {
counter = counter + 1;
}
$('#slide' + counter).show("slide", { direction: "right" }, 800);
startSlider();
});
});
我一直在尝试使用 jQuery 创建一个简单的图像滑块,但 next/previous 按钮却成了问题。我不知道如何防止因向它们发送垃圾邮件或按得太快而引起的各种错误和故障。这是代码
http://jsfiddle.net/6tkquyn1/2/ ...有人可以帮忙吗?
HTML
<div id="slider">
<div id="arrowleft" class="slidernav"></div>
<div id="arrowright" class="slidernav"></div>
<img class="slide" id="slide1" src="http://s27.postimg.org/rquk1bk37/slide1.jpg">
<img class="slide" id="slide2" src="http://s3.postimg.org/5baw2ey6b/slide2.jpg">
<img class="slide" id="slide3" src="http://s18.postimg.org/jej03064p/slide3.jpg">
<img class="slide" id="slide4" src="http://s22.postimg.org/ubbx4ev4h/slide4.jpg">
CSS
*{
magin: 0px;
padding: 0px;
}
#slider
{
height: 350px;
width: 700px;
border: solid black 2px;
position: relative;
}
.slide
{
position: absolute;
overflow: hidden;
display: none;
}
.slidernav
{
z-index: 999;
opacity: 0;
position: absolute;
cursor: pointer;
transition: .5s;
}
.slidernav:hover
{
opacity: 0.8;
}
#arrowright
{
height: 350px;
width: 70px;
right: 0;
background-image: url(http://s1.postimg.org/hx6atzftb/arrowright.png);
}
#arrowleft
{
height: 350px;
width: 70px;
left: 0;
background-image: url(http://s22.postimg.org/5fn2unxu9/arrowleft.png);
}
JS
$(document).ready(function(){
$("#slide1").show("fade",800);
var interval;
var counter = 1;
var slideNumber = $("#slider img").size();
function startSlider () {interval = setInterval(function(){
$("#slide"+counter).hide("slide",{direction:"left"},800);
if(counter==slideNumber){counter = 1;}
else{counter = counter+1;}
$("#slide"+counter).show("slide",{direction:"right"},800);},4800);}
startSlider();
function pauseSlider() {clearInterval(interval);}
$(".slide").on("mouseover", pauseSlider).on("mouseleave", startSlider);
$('#arrowleft').click(
function () {
$('.slide').queue();
pauseSlider();
$('#slide'+ counter).hide("slide",{direction: "right"},800);
if(counter==1){counter = slideNumber;}
else{counter = counter-1;}
$('#slide'+ counter).show("slide",{direction: "left"},800);
startSlider();
});
$('#arrowright').click(
function () {
$('.slide').queue();
pauseSlider();
$('#slide'+ counter).hide("slide",{direction: "left"},800);
if(counter == slideNumber){counter = 1;}
else{counter = counter+1;}
$('#slide'+ counter).show("slide",{direction: "right"},800);
startSlider();
});
});
尝试在 css
中使用以下内容`*{ 保证金:0px; 填充:0px; }
#slider
{
height: 350px;
width: 700px;
border: solid black 2px;
position: relative;
}
.slide
{
position: absolute;
overflow: hidden;
display: none;
}
.slidernav
{
z-index: 999;
opacity: 0;
position: absolute;
cursor: pointer;
transition: .5s;
}
.slidernav:hover
{
opacity: 0.8;
}
#arrowright
{
height: 350px;
width: 70px;
left:440px;
background-image: url(http://s1.postimg.org/hx6atzftb/arrowright.png);
}
#arrowleft
{
height: 350px;
width: 70px;
left: 0;
background-image: url(http://s22.postimg.org/5fn2unxu9/arrowleft.png);
}`
我刚刚在#arrowright 中用 "left: 440px;" 替换了 "right: 0;"。现在正在运行。
好的,您可以通过测试查看上一张幻灯片是否已完全移出视图来解决此问题。您可以使用 jQuery: $(...).is(':visible') 进行测试。此处对您的原始代码进行了一些更改:
1) 现在有一个 lastCounter,它在允许用户更改幻灯片之前跟踪需要隐藏的幻灯片。每当有幻灯片转换时都会更新。
2) 幻灯片更改回调现在会在允许用户再次更改图像之前检查动画是否完成。
$(document).ready(function () {
$("#slide1").show("fade", 800);
var interval;
var counter = 1;
var lastCounter = 2;
var slideNumber = $("#slider img").size();
function startSlider() {
interval = setInterval(function () {
$("#slide" + counter).hide("slide", { direction: "left" }, 800);
lastCounter = counter;
if (counter == slideNumber) {
counter = 1;
} else {
counter = counter + 1;
}
$("#slide" + counter).show("slide", { direction: "right" }, 800);
}, 4800);
}
startSlider();
function pauseSlider() {
clearInterval(interval);
}
$(".slide").on("mouseover", pauseSlider).on("mouseleave", startSlider);
$('#arrowleft').click(function() {
if ($('#slide' + lastCounter).is(":visible")) {
return;
}
$('.slide').queue();
pauseSlider();
$('#slide' + counter).hide("slide", { direction: "right" }, 800);
lastCounter = counter;
if (counter == 1) {
counter = slideNumber;
} else {
counter = counter - 1;
}
$('#slide' + counter).show("slide", { direction: "left" }, 800);
startSlider();
});
$('#arrowright').click(function() {
if ($('#slide' + lastCounter).is(":visible")) {
return;
}
$('.slide').queue();
pauseSlider();
$('#slide' + counter).hide("slide", { direction: "left" }, 800);
lastCounter = counter;
if (counter == slideNumber) {
counter = 1;
} else {
counter = counter + 1;
}
$('#slide' + counter).show("slide", { direction: "right" }, 800);
startSlider();
});
});