欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用jQuery实现旋转木马效果

程序员文章站 2022-05-27 16:01:54
...
/*该篇博文介绍一下旋转木马的做法,废话不多说,先来看看我们需要实现的效果*/

使用jQuery实现旋转木马效果

/*首先我们需要准备一个大盒子,包裹着一个ul和装有箭头的div,ul里准备5个li标签分别装着展示的图片
从图中看的效果,只显示三张图片,一张主图片,还有两张分别是上一页还有下一页的图片,
那么,从这里我们很容易能知道,图中所有的图片的样式都是固定的,那么我们可以用一个数组,数组里用对象存储这5张图片的css
属性,大概就是这样的属性:隐藏-小图-大图-小图-隐藏,我们现在index为2的第三张图片为大图属性,
这里以下一页为例子吧,点击下一页,只需要将数组里的最后一个对象属性删除,
再将刚删除的对应属性,添加回原来数组的最前面.那么此时,数组里第四个对象,就是大图属性的css属性,
换句话说,就是我们将数组里的对象属性换了位置,他记录着下一页每个图片的css属性,
那么我们只需要再次调用我们jQuery的animate属性就可以轻松完成需要实现的效果.*/

/*分析完思路,我们现在来确认需求,一步一步实现

需求1:我们刚进入网页的时候,图片会自己走到自己对应的位置
*这个简单,因为我们css样式已经记录了每个图片的位置,所以,我们只需要在交互之前调用一次animate方法即可

需求2:移入大盒子,显示上一页下一页箭头,移出消失
*这个简单,加移入移出事件即可,这里可以说下用jQuery的hover方法也不错

需求3:右箭头下一页,左箭头上一页
*还是以下一页为例吧,当我们点击下一页时,我们可以用数组的pop方法把最后一个元素删掉,把他得到的返回值,也就是刚删掉的元素
用unshift方法把他加到数组的第一个元素即可
*那么此时还有个问题,就是如果我们频繁的点击上一页下一页,那么效果可能不是很好,那么我们可以用一个变量记录一个布尔值
*当变量为true时,表示可以执行我们的动画效果,点击上一页或下一页时,将该变量变为false,阻止用户的多次点击,当动画
*播放结束时,利用animate的回调函数可以将布尔值赋值为true.

下面放出我们的代码,希望这篇博文能帮到你O(∩_∩)O...*/
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <title>旋转轮播图效果</title>
  <meta name="description" content="" />
  <meta name="keywords" content="" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <link rel="stylesheet" href="css/demo.css"/>
  <script src="js/jquery-1.12.2.js"></script>
  <script src="js/demo.js"></script>
</head>
<body>
<div class="wrap">
  <div class="slide" id="slide">
    <ul>
      <li><img src="img/slidepic1.jpg" alt="" /></li>
      <li><img src="img/slidepic2.jpg" alt="" /></li>
      <li><img src="img/slidepic3.jpg" alt="" /></li>
      <li><img src="img/slidepic4.jpg" alt="" /></li>
      <li><img src="img/slidepic5.jpg" alt="" /></li>
    </ul>
    <div class="arrow">
      <a href="javascript:;" class="prev"></a>
      <a href="javascript:;" class="next"></a>
    </div>
  </div>
</div>
</body>
</html>
@charset "UTF-8";
/**
 * 
 * @authors zengjiahao
 * @date    2018-02-26 
 * @version 1.0
 */
/*初始化  reset*/
blockquote, body, button, dd, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul {
  margin: 0;
  padding: 0
}

body, button, input, select, textarea {
  font: 12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;
  color: #666;
}

ol, ul {
  list-style: none
}

a {
  text-decoration: none
}

fieldset, img {
  border: 0;
  vertical-align: top;
}

a, input, button, select, textarea {
  outline: none;
}

a, button {
  cursor: pointer;
}

.wrap {
  width: 1200px;
  margin-left: auto;
  margin-right: auto;
  border: 1px solid red;
}

.slide {
  position: relative;
  height: 500px;
}

.slide ul {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
}

.slide li {
  position: absolute;
  width: 800px;
  height: 500px;
  left: 200px;
  top: 0;
  background-color: #6475ae;
}

.slide img {
  width: 100%;
  height: 100%;
}

.arrow {
  position: absolute;
  z-index: 10;
  width: 100%;
  height: 100%;
  display: none;
}

.arrow a {
  position: absolute;
  left: 100px;
  top: 50%;
  width: 76px;
  height: 112px;
  margin-top: -56px;
  background: url(../img/prev.png) 0 0 no-repeat;
}

.arrow .next {
  right: 100px;
  left: auto;
  background-image: url(../img/next.png);
}
/**
 * Created by zengjiahao on 2018/2/6.
 */
$(function(){
    var pos = [
        {
            width:564,
            height:330,
            left:34,
            top:0,
            opacity:0,
            z:2
        },
        {
            width:564,
            height:330,
            left:34,
            top:79,
            opacity:0.8,
            z:3
        },
        {
            width:800,
            height:500,
            left:200,
            top:0,
            opacity:1,
            z:4
        },
        {
            width:564,
            height:330,
            left:605,
            top:79,
            opacity:0.8,
            z:3
        },
        {
            width:564,
            height:330,
            left:605,
            top:0,
            opacity:0,
            z:2
        }
    ];
    // 1. 获得要操作的对象
    var lis = $(".slide ul li");
    var arrow = $(".arrow");
    var flag  = true;

    // 2. 让每个li标签走到指定的位置
    assign();
    function assign(){
        $.each(pos,function (index,ele){
            // index是索引号  ele是数组中的对象
            lis.eq(index).css("zIndex",ele.z).stop().animate(ele,500,function (){
                   flag = true;
            });
        });
    }

    // 3. 鼠标移入大盒子的时候,要显示左右按钮 ,离开大盒子,要隐藏左右按钮
    $(".wrap").hover(function (){
           arrow.fadeIn();
    },function (){
           arrow.fadeOut();
    })
    // 4. 给右侧按钮注册事件
    $(".next").on("click",function (){
        if(flag){
            flag = false;
            pos.unshift(pos.pop());
            assign();
        }

    })
    // 5. 给左侧按钮注册事件
    $(".prev").on("click",function (){
        if(flag){
            flag = false;
            pos.push(pos.shift());
            // 数组现在是重新排列的了,再让li标签根据新的数组,重新生成自己的样式
            assign();
        }

    })
})
相关标签: js 旋转木马