是否可以获得指向特定幻灯片的链接?只要我在示例中选择链接,滑块就不再起作用了。仅显示没有功能的列表项。选择链接时,滑块应滚动到相应的幻灯片。这有可能吗?任何帮助将不胜感激。谢谢。
jQuery(document).ready(function($) {
$('#checkbox').change(function() {
setInterval(function() {
moveRight();
}, 3000);
});
var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;
$('#slider').css({
width: slideWidth,
height: slideHeight
});
$('#slider ul').css({
width: sliderUlWidth,
marginLeft: -slideWidth
});
$('#slider ul li:last-child').prependTo('#slider ul');
function moveLeft() {
$('#slider ul').animate({
left: +slideWidth
}, 200, function() {
$('#slider ul li:last-child').prependTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function moveRight() {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
});
};
$('a.control_prev').click(function() {
moveLeft();
});
$('a.control_next').click(function() {
moveRight();
});
});
#slider {
position: relative;
overflow: hidden;
margin: 20px auto 0 auto;
border-radius: 4px;
}
#slider ul {
position: relative;
margin: 0;
padding: 0;
height: 200px;
list-style: none;
}
#slider ul li {
position: relative;
display: block;
float: left;
margin: 0;
padding: 0;
width: 500px;
height: 300px;
background: #ccc;
text-align: center;
line-height: 300px;
}
a.control_prev,
a.control_next {
position: absolute;
top: 40%;
z-index: 999;
display: block;
padding: 4% 3%;
width: auto;
height: auto;
background: #2a2a2a;
color: #fff;
text-decoration: none;
font-weight: 600;
font-size: 18px;
opacity: 0.8;
cursor: pointer;
}
a.control_prev:hover,
a.control_next:hover {
opacity: 1;
-webkit-transition: all 0.2s ease;
}
a.control_prev {
border-radius: 0 2px 2px 0;
}
a.control_next {
right: 0;
border-radius: 2px 0 0 2px;
}
.slider_option {
position: relative;
margin: 10px auto;
width: 160px;
font-size: 18px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#one">SLIDE 1</a>
<br>
<a href="#two">SLIDE 2</a>
<br>
<a href="#three">SLIDE 3</a>
<br>
<a href="#four">SLIDE 4</a>
<br>
<div id="slider">
<a href="#" class="control_next">
<p>></p>
</a>
<a href="#" class="control_prev">
<p><</p>
</a>
<ul>
<li id="one">SLIDE 1</li>
<li style="background: #aaa;" id="two">SLIDE 2</li>
<li id="three">SLIDE 3</li>
<li style="background: #aaa;" id="four">SLIDE 4</li>
</ul>
</div>
答案 0 :(得分:2)
你必须在这里做更多工作 - 所以这就是我所做的:
我。首先我创建了一个 slideRight 函数,其函数为callback
:
function slideRight(callback) {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
callback();
});
}
II。使用属性 data-peek
修改链接,链接到相应的幻灯片,如下所示:
<a href="#" class="peek" data-peek="one">SLIDE 1</a>
III。现在,以下脚本将起到魔力:
$('a.peek').click(function() {
slide($('#slider ul'), $(this).attr('data-peek'));
});
function slide(el, peek) {
if (el.find('li:nth-child(2)').attr('id') !== peek) {
slideRight(function() {
slide(el, peek);
});
}
}
见下面的演示:
jQuery(document).ready(function($) {
$('#checkbox').change(function() {
setInterval(function() {
moveRight();
}, 3000);
});
var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;
$('#slider').css({
width: slideWidth,
height: slideHeight
});
$('#slider ul').css({
width: sliderUlWidth,
marginLeft: -slideWidth
});
$('#slider ul li:last-child').prependTo('#slider ul');
function moveLeft() {
$('#slider ul').animate({
left: +slideWidth
}, 200, function() {
$('#slider ul li:last-child').prependTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function moveRight() {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function slideRight(callback) {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
callback();
});
}
$('a.control_prev').click(function() {
moveLeft();
});
$('a.control_next').click(function() {
moveRight();
});
$('a.peek').click(function() {
slide($('#slider ul'), $(this).attr('data-peek'));
});
function slide(el, peek) {
if (el.find('li:nth-child(2)').attr('id') !== peek) {
slideRight(function() {
slide(el, peek);
});
}
}
});
#slider {
position: relative;
overflow: hidden;
margin: 20px auto 0 auto;
border-radius: 4px;
}
#slider ul {
position: relative;
margin: 0;
padding: 0;
height: 200px;
list-style: none;
}
#slider ul li {
position: relative;
display: block;
float: left;
margin: 0;
padding: 0;
width: 500px;
height: 300px;
background: #ccc;
text-align: center;
line-height: 300px;
}
a.control_prev,
a.control_next {
position: absolute;
top: 40%;
z-index: 999;
display: block;
padding: 4% 3%;
width: auto;
height: auto;
background: #2a2a2a;
color: #fff;
text-decoration: none;
font-weight: 600;
font-size: 18px;
opacity: 0.8;
cursor: pointer;
}
a.control_prev:hover,
a.control_next:hover {
opacity: 1;
-webkit-transition: all 0.2s ease;
}
a.control_prev {
border-radius: 0 2px 2px 0;
}
a.control_next {
right: 0;
border-radius: 2px 0 0 2px;
}
.slider_option {
position: relative;
margin: 10px auto;
width: 160px;
font-size: 18px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="peek" data-peek="one">SLIDE 1</a>
<br>
<a href="#" class="peek" data-peek="two">SLIDE 2</a>
<br>
<a href="#" class="peek" data-peek="three">SLIDE 3</a>
<br>
<a href="#" class="peek" data-peek="four">SLIDE 4</a>
<br>
<div id="slider">
<a href="#" class="control_next">
<p>></p>
</a>
<a href="#" class="control_prev">
<p><</p>
</a>
<ul>
<li id="one">SLIDE 1</li>
<li style="background: #aaa;" id="two">SLIDE 2</li>
<li id="three">SLIDE 3</li>
<li style="background: #aaa;" id="four">SLIDE 4</li>
</ul>
</div>
修改强>:
这是一个不使用自定义属性的解决方案 - 使用id
代替:
jQuery(document).ready(function($) {
$('#checkbox').change(function() {
setInterval(function() {
moveRight();
}, 3000);
});
var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;
$('#slider').css({
width: slideWidth,
height: slideHeight
});
$('#slider ul').css({
width: sliderUlWidth,
marginLeft: -slideWidth
});
$('#slider ul li:last-child').prependTo('#slider ul');
function moveLeft() {
$('#slider ul').animate({
left: +slideWidth
}, 200, function() {
$('#slider ul li:last-child').prependTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function moveRight() {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function slideRight(callback) {
$('#slider ul').animate({
left: -slideWidth
}, 200, function() {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
callback();
});
}
$('a.control_prev').click(function() {
moveLeft();
});
$('a.control_next').click(function() {
moveRight();
});
$('a.peek').click(function() {
slide($('#slider ul'), $(this).attr('id').split('_')[1]);
});
function slide(el, peek) {
if (el.find('li:nth-child(2)').attr('id') !== peek) {
slideRight(function() {
slide(el, peek);
});
}
}
});
#slider {
position: relative;
overflow: hidden;
margin: 20px auto 0 auto;
border-radius: 4px;
}
#slider ul {
position: relative;
margin: 0;
padding: 0;
height: 200px;
list-style: none;
}
#slider ul li {
position: relative;
display: block;
float: left;
margin: 0;
padding: 0;
width: 500px;
height: 300px;
background: #ccc;
text-align: center;
line-height: 300px;
}
a.control_prev,
a.control_next {
position: absolute;
top: 40%;
z-index: 999;
display: block;
padding: 4% 3%;
width: auto;
height: auto;
background: #2a2a2a;
color: #fff;
text-decoration: none;
font-weight: 600;
font-size: 18px;
opacity: 0.8;
cursor: pointer;
}
a.control_prev:hover,
a.control_next:hover {
opacity: 1;
-webkit-transition: all 0.2s ease;
}
a.control_prev {
border-radius: 0 2px 2px 0;
}
a.control_next {
right: 0;
border-radius: 2px 0 0 2px;
}
.slider_option {
position: relative;
margin: 10px auto;
width: 160px;
font-size: 18px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" class="peek" id="link_one">SLIDE 1</a>
<br>
<a href="#" class="peek" id="link_two">SLIDE 2</a>
<br>
<a href="#" class="peek" id="link_three">SLIDE 3</a>
<br>
<a href="#" class="peek" id="link_four">SLIDE 4</a>
<br>
<div id="slider">
<a href="#" class="control_next">
<p>></p>
</a>
<a href="#" class="control_prev">
<p><</p>
</a>
<ul>
<li id="one">SLIDE 1</li>
<li style="background: #aaa;" id="two">SLIDE 2</li>
<li id="three">SLIDE 3</li>
<li style="background: #aaa;" id="four">SLIDE 4</li>
</ul>
</div>