基于jQuery实现图片推拉门动画效果的两种方法


Posted in jQuery onAugust 26, 2017

''推拉门''动效也可以称作"手风琴"效果,大多数效果实现的思路基本是一样的,下面介绍两种方法,一种是通过改变图片的偏移位置实现移动,另一种是通过遍历背景图片后改变图片的宽度实现变换。

实现方法一:改变图片宽度

html+css代码

<body>
  <div class="box">
    <ul>
      <!-- <li>![](images/slidepic2.jpg)</li> -->
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
    </ul>
  </div>
</body>
<style>
    *{
      padding: 0;
      margin: 0;
    }
    .box{
      /*收缩状态:缩放时每个图片的大小240px 所以总大小1200px*/
      /*展开状态:当前图片宽度800px 其他图片宽度100px*/
      width: 1200px;
      height: 500px;
      border:1px solid red;
      margin: 50px auto;
    }
    .box ul{
      list-style: none;
      width: 1210px;
    }
    /*设置每一张图片的大小和float: left*/
    .box ul li{
      width: 240px;
      height: 500px;
      /*background: url(images/slidepic2.jpg);*/
      float: left;
    }
  </style>

jQuery实现

<script src = 'jquery-3.2.1.js'></script>
<script>
  $(function(){
    //1遍历每一张li 获取每个元素设置对应的图片
    var lis = $('li');
    lis.each(function(index, element){
      //通过设置背景图片名称改变图片的显示
      var imgName = "images/slidepic" + (index + 2) +".jpg ";
      $(element).css('background', "url('"+ imgName +"')")
    });
    //2.展开状态
    //鼠标滑入改变对应图片宽度800 其他图片(兄弟)改为100
    lis.mouseenter(function(){
      // console.log(this); 当前的li DOM元素
      //当前的图片的宽度变为800
      $(this).stop().animate({width: 800});
      //其他图片的宽度变为100
      $(this).siblings('li').stop().animate({width: 100});
    });
    //3鼠标滑出是全部显示为收缩状态
    lis.mouseout(function(){
      lis.stop().animate({width: 240});
    });
  })
</script>

jQuery精简后代码

//精简代码
$(function(){
  $('li').each(function(index, element){
    $(element).css('backgroud',"url('images/slidepic"+(index + 2)+.jpg')");
  }).mouseenter(function(){
    $(this).stop().animate({width: 800}).siblings().stop().aniamte(width: 100});
  }).mouseout(function(){
    $('li').stop().animate({width: 240});
  });
})

实现方法二:改变图片的偏移值

html+css代码

<body>
  <div class="picList">
    <ul>
      <li>![](images/slidepic8.jpg)</li>
      <li>![](images/slidepic3.jpg)</li>
      <li>![](images/slidepic4.jpg)</li>
      <li>![](images/slidepic5.jpg)</li>
      <li>![](images/slidepic7.jpg)</li>
    </ul>
  </div>
</body>
<style>
    *{
      background-color: #aaa;
      padding: 0;
      margin: 0;
    }
    ul{list-style: none;}
    .picList{
      width: 1000px;
      height: 400px;
      /*border:1px solid #eee;*/
      margin:100px auto;
      position: relative;
      overflow: hidden;
    }
    /*设置定位属性 所有图片覆盖在起始位置*/
    .picList ul li{
      position: absolute;
      width: 1000px;
      height: 400px;
      top: 0;
    }
    img{
      width: 100%;
      height: 400px;
      cursor: pointer;
    }
</style>

jQuery实现

<script src = 'jquery-3.2.1.js'></script>
<script >
  $(function(){
    //1获取所有的图片 设置初始的收缩状态left:i*200
    var lis = $('li');
    for(var i = 0; i < lis.length; i++){
      lis.eq(i).css({left:i*200 + 'px' });
    }
    //2.设置hover内置函数,实现鼠标滑入展开滑出收缩效果
    lis.hover(function(){
      var index = $(this).index(); //DOM对象转换jQuery对象
      //2.1鼠标滑入后,当前图片的前面图片偏移位置减小到 j*100位置
      for(var j = 0; j <= index; j++){
        lis.eq(j).stop().animate({left: j*100 + 'px'},300);
      }
      //2.2鼠标滑入后,当前图片的后面图片偏移位置扩大到 500+j*100位置
      for(var j = index + 1; j < lis.length; j++){
        lis.eq(j).stop().animate({left: 500+j*100 + 'px'},300);
      }
    },function(){ //2.3鼠标滑出后,所有图片恢复到原来的位置 i*200
      for(var i = 0; i < lis.length; i++){
        lis.eq(i).stop().animate({left: i*200 + 'px'},300);
      }
    });
  })
</script>

注意:方法一在实现的过程中,注意宽度和图片命名的设置。

提示:这里使用的是jQuery代码实现,javaScript代码也是一样的可以实现,只是修改下遍历过程和内置函数方法,另外再重写动画函数(前面的笔记有封装好的animate函数,可以直接引入使用)。

总结

以上所述是小编给大家介绍的基于jQuery实现图片推拉门动画效果的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
jQuery中的deferred对象和extend方法详解
May 08 jQuery
jQuery zTree树插件动态加载实例代码
May 11 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
Jun 18 jQuery
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
详解webpack3如何正确引用并使用jQuery库
Aug 26 #jQuery
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 #jQuery
使用jQuery实现页面定时弹出广告效果
Aug 24 #jQuery
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 #jQuery
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 #jQuery
jQuery Position方法使用和兼容性
Aug 23 #jQuery
基于jQuery实现的单行公告活动轮播效果
Aug 23 #jQuery
You might like
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
jquery实现excel导出的方法
2013/04/04 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
Python检测生僻字的实现方法
2016/10/23 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python 多线程重启方法
2019/02/18 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
护士自荐信
2013/10/25 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
大三学习计划书范文
2014/05/02 职场文书
群众路线剖析材料
2014/09/30 职场文书
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫