javascript - 一个滚动轮播的问题,存在bug
伊谢尔伦
伊谢尔伦 2017-04-11 10:31:15
[JavaScript讨论组]
<!doctype html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>banner</title>
</head>
<style>
*{padding:0; margin:0; list-style:none;}
.main{ width:100%;}
.pic{ width:100%; overflow:hidden; position:relative;}
.pic ul li{ position:absolute; left:100%; width:100%;}
.pic ul li.current{ position:static;}
.pic ul li img{ width:100%;}
.abs{ position:absolute;}
.rel{ position:relative;}
.Right{position:absolute;right:0px; top:50%; margin-top:-20px; width:26px; height:40px; cursor:pointer;}
.Left{position:absolute;left:0px; top:50%; margin-top:-20px; width:26px; height:40px; cursor:pointer;}
</style>

<body>
<p class="main rel">
  <p class="pic">
    <ul>
      <li class="current"><img src="images/a-0.jpg"/></li>
      <li><img src="images/a-1.jpg"/></li>
      <li><img src="images/a-2.jpg"/></li>
    </ul>
  </p>
  <img class="Left abst" src="images/right.png"/>
  <img class="Right abst" src="images/left.png">
</p>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
var d=0;//当前点下标
var z=0;//之前点下标
var timer=null;//存放定时函数

$(".abst").hover(function(){
    clearInterval(timer);
},function(){
    timer=setInterval("turnRight()",3000);
});

//鼠标点击左右箭头切换
function turnRight(){
    d++;
    if(d>2){d=0};
    $(".pic ul li").removeClass("current").eq(z).stop().animate({left:"-100%"},300);
    $(".pic ul li").eq(d).css("left","100%");
    $(".pic ul li").eq(d).stop().animate({left:"0"},300).addClass("current");
    z=d;
    console.log(d+"+"+z)
};
function turnLeft(){
    d--;
    if(d<0){d=2};
    $(".pic ul li").removeClass("current").eq(z).stop().animate({left:"100%"},300);
    $(".pic ul li").eq(d).css("left","-100%");
    $(".pic ul li").eq(d).stop().animate({left:"0"},300).addClass("current");
    z=d;
    console.log(d+"+"+z)
};
$(".Left").click(function(){
    turnLeft();
});
$(".Right").click(function(){
    turnRight();
});
timer=setInterval("turnRight()",3000);
</script>
</body>
</html>

图片奉上:




因为做的是个宽度自适应的轮播,
现在问题是每次轮播到最后一张图片,与第一张图片的衔接没有动画效果

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
PHP中文网

原因是当在最后一个图片的时候,第一个图片把第三个图片给遮住了,其实动画是有的。

给你做了修改,只改了右边的按钮,左边的没改,你自己看看代码修改下

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>banner</title>
</head>
<style>
*{padding:0; margin:0; list-style:none;}
.main{ width:100%;}
.pic{ width:100%; overflow:hidden; position:relative; min-height:1000px;}
.pic ul li{ position:absolute; left:0; width:100%; top:0; display:none;}
.pic ul li.current{ position:static; display:block;}
.pic ul li img{ width:100%;}
.abs{ position:absolute;}
.rel{ position:relative;}
.Right{position:absolute;right:0px; top:50%; margin-top:-20px; width:26px; height:40px; cursor:pointer;}
.Left{position:absolute;left:0px; top:50%; margin-top:-20px; width:26px; height:40px; cursor:pointer;}
</style>

<body>
<p class="main rel">
  <p class="pic">
    <ul>
      <li class="current"><img src="images/a-0.jpg"/></li>
      <li><img src="images/a-1.jpg"/></li>
      <li><img src="images/a-2.jpg"/></li>
    </ul>
  </p>
  <img class="Left abst" src="images/right.png"/>
  <img class="Right abst" src="images/left.png">
</p>
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
var d=0;//当前点下标
var z=0;//之前点下标
var timer=null;//存放定时函数

// $(".abst").hover(function(){
//     clearInterval(timer);
// },function(){
//     timer=setInterval("turnRight()",3000);
// });

var allItems = $(".pic ul li");
var itemCount = allItems.length;

//鼠标点击左右箭头切换
function turnRight(){
    var item = $('.current');
    var currentIndex = allItems.index(item);
    currentIndex++;
    currentIndex = currentIndex>= itemCount? 0: currentIndex;
    var next = allItems.eq(currentIndex);

    allItems.css('z-index','0').hide();
    item.show().css({'left':'0', 'z-index': currentIndex+1});
    item.removeClass('current').stop().animate({left:"-100%"},3000);
    next.show().css({'left':'0', 'z-index': currentIndex+2}).addClass('current');
    // d++;
    // if(d>2){d=0};
    // $(".pic ul li").removeClass("current").eq(z).stop().animate({left:"-100%"},1000);
    // $(".pic ul li").eq(d).css("left","100%");
    // $(".pic ul li").eq(d).stop().animate({left:"0"},1000).addClass("current");
    // z=d;
    // console.log(d+"+"+z)
};
function turnLeft(){
    d--;
    if(d<0){d=2};
    $(".pic ul li").removeClass("current").eq(z).stop().animate({left:"100%"},300);
    $(".pic ul li").eq(d).css("left","-100%");
    $(".pic ul li").eq(d).stop().animate({left:"0"},300).addClass("current");
    z=d;
    console.log(d+"+"+z)
};
$(".Left").click(function(){
    turnLeft();
});
$(".Right").click(function(){
    turnRight();
});
// timer=setInterval("turnRight()",3000);
</script>
</body>
</html>
PHP中文网

使用css3transform: translate3d()配合transition实现过渡效果,实现简单,性能上也要比这种操作left属性好很多:)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号