zoukankan      html  css  js  c++  java
  • js实现轮播图

    js实现轮播图

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <style>
    * {
    margin:0;
    padding:0;
    }
    a{
    text-decoration: none;
    }
     
    我们为了让图片只在container中,所以需要限定其宽度和高度并且使用overflow:hidden;将其余的图片隐藏起来,并且我们希望wrap相对于container左右移动,所以设置为relative
     
    .container {
    position: relative;
     600px;
    height: 400px;
    margin:100px auto 0 auto;
    box-shadow: 0 0 5px green;
    overflow: hidden;
    }
    我们设置wrap是绝对定位的,所以,我们就可以通过控制Left和Right来控制图片的移动了。设置z-index:1;以对后面将要放置的buttons作为参考。 因为共有七张图片,所以width为4200px(每张图片我们设置为600X400),我们只需让图片左浮动即可实现占满一排了。
    .container .wrap {
    position: absolute;
     4200px;
    height: 400px;
    z-index: 1;
    }
    把图片设置位左浮动,并限定其大小
    .container .wrap img {
    float: left;
     600px;
    height: 400px;
    }
    把显示次序的buttons放在图片的右下角。并且设置z-index:2;以保证buttons是在图片的上面的
    .container .buttons {
    position: absolute;
    right: 5px;
    bottom:40px;
     150px;
    height: 10px;
    z-index: 2;
    }
    将buttons下面的span做一个简单的修饰,并且给和图片对应的span设置一个on类
    .container .buttons span {
    margin-left: 5px;
    display: inline-block;
     20px;
    height: 20px;
    border-radius: 50%;
    background-color: green;
    text-align: center;
    color:white;
    cursor: pointer;
    }
    .container .buttons span.on{
    background-color: red;
    }
    把左右切换的箭头加上,然后做简单的修饰,注意:因为这里使用实体来表示左右箭头,所以设置font-size才能改变其大小
    .container .arrow {
    position: absolute;
    top: 35%;
    color: green;
    padding:0px 14px;
    border-radius: 50%;
    font-size: 50px;
    z-index: 2;
    display: none;
    }
    .container .arrow_left {
    left: 10px;
    }
    .container .arrow_right {
    right: 10px;
    }
    .container:hover .arrow {
    display: block;
    }
    .container .arrow:hover {
    background-color: rgba(0,0,0,0.2);
    }
    </style>
    </head>
    <body>
    <div class="container">
    <div class="wrap" style="left: -600px;">
    <img src="./img/5.jpg" alt="">
    <img src="./img/1.jpg" alt="">
    <img src="./img/2.jpg" alt="">
    <img src="./img/3.jpg" alt="">
    <img src="./img/4.jpg" alt="">
    <img src="./img/5.jpg" alt="">
    <img src="./img/1.jpg" alt="">
    </div>
    <!-- 只有五张图片,却使用7张来轮播,这是为了实现无缝轮播,后面会详细介绍。
    
      而5个span,即我们可以实时看到轮播图目前所处的位置。
    
      最后是两个按钮,可以通过它来控制前进与后退。
    
      这里我们需要对wrap使用绝对定位,所以用left:-600px;将第一张图片显示出来。
    <div class="buttons">
    <span class="on">1</span>
    <span>2</span>
    <span>3</span>
    <span>4</span>
    <span>5</span>
    </div>
    <a href="javascript:;" class="arrow arrow_left">&lt;</a>
    <a href="javascript:;" class="arrow arrow_right">&gt;</a>
    </div>
    <script>
    首先获取到 wrap(因为要设置其left才能控制轮播图),然后获取到左右两个箭头,并实现手动轮播
     
    值得注意的是,这里wrap.style.left是一个字符串,所以要转化为数字才能进行计算,而设定left时就要加上px成为一个字符串了。
    var wrap = document.querySelector(".wrap");
    var next = document.querySelector(".arrow_right");
    var prev = document.querySelector(".arrow_left");
    next.onclick = function () {
    next_pic();
    }
    prev.onclick = function () {
    prev_pic();
    }
    function next_pic () {
    index++;
    if(index > 4){
    index = 0;
    }
    showCurrentDot();
    var newLeft;
    if(wrap.style.left === "-3600px"){
    newLeft = -1200;
    }else{
    newLeft = parseInt(wrap.style.left)-600;
    }
    wrap.style.left = newLeft + "px";
    }
    function prev_pic () {
    index--;
    if(index < 0){
    index = 4;
    }
    showCurrentDot();
    var newLeft;
    if(wrap.style.left === "0px"){
    newLeft = -2400;
    }else{
    newLeft = parseInt(wrap.style.left)+600;
    }
    wrap.style.left = newLeft + "px";
    }
    var timer = null;
    function autoPlay () {
    timer = setInterval(function () {
    next_pic();
    },1000);
    }
    autoPlay();
    
    var container = document.querySelector(".container");
    container.onmouseenter = function () {
    clearInterval(timer);
    }
    container.onmouseleave = function () {
    autoPlay();
    }
    
    var index = 0;
    var dots = document.getElementsByTagName("span");
    function showCurrentDot () {
    for(var i = 0, len = dots.length; i < len; i++){
    dots[i].className = "";
    }
    dots[index].className = "on";
    }
    
    for (var i = 0, len = dots.length; i < len; i++){
    (function(i){
    dots[i].onclick = function () {
    var dis = index - i;
    if(index == 4 && parseInt(wrap.style.left)!==-3000){
    dis = dis - 5;
    }
    //和使用prev和next相同,在最开始的照片5和最终的照片1在使用时会出现问题,导致符号和位数的出错,做相应地处理即可
    if(index == 0 && parseInt(wrap.style.left)!== -600){
    dis = 5 + dis;
    }
    wrap.style.left = (parseInt(wrap.style.left) + dis * 600)+"px";
    index = i;
    showCurrentDot();
    }
    })(i);
    }
    </script>
    </body>
    </html>

    实现一个轮播图还是不难的,大体思路: 先创建一个div,限定其宽度和高度,overflow:hidden,且设置其position为relative。然后创建一个装图片的div,宽度为所有图片的总宽度,且设置其position为absolute,并且使其中的内容浮动,这样所有的图片就处于一行中。然后为了实现无缝滚动,所以需要在首尾分别添加一张过渡图片。 先添加两个按钮, 使其可以手动轮播,然后只需要添加一个定时器使其朝一个方向自动轮播即可,因为用户有时需要查看详情,所以当鼠标进入时就clear定时器,滑出再定时播放。为了更好地用户体验,我们再下面添加了一排小圆点,用户可以清楚地知道现在所处的位置, 最后, 利用闭包使得用户可以直接通过点击小圆点切换图片。

    注意:想看效果可以换下图片  ,把文字弄成注释。

  • 相关阅读:
    linux下QT程序输出乱码解决方法
    Qt中新建类构造函数的初始化参数列表
    移植tslib1.4至mini2440
    Linux中总线设备驱动模型及平台设备驱动实例
    igntie实现数据同步
    django-初始化举例
    django-总体
    django-admin层
    django-view层
    django-template层
  • 原文地址:https://www.cnblogs.com/yu412/p/11441256.html
Copyright © 2011-2022 走看看