JS实现图片手风琴效果


Posted in Javascript onApril 17, 2020

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

JS实现图片手风琴效果

推拉门收缩状态.png

JS实现图片手风琴效果

"推拉门"展开状态.png

"推拉门"实现方法一:改变图片宽度

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>

"推拉门"实现方法二:改变图片的偏移值

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函数,可以直接引入使用)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
JavaScript Ajax实现异步通信
Dec 14 Javascript
原生JavaScript实现Ajax异步请求
Nov 19 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
实现vuex原理的示例
Oct 21 Javascript
javascript实现计算器功能详解流程
Nov 01 Javascript
vue服务端渲染的实例代码
Aug 28 #Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 #jQuery
使用react-router4.0实现重定向和404功能的方法
Aug 28 #Javascript
vue.js路由跳转详解
Aug 28 #Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 #jQuery
解决IE7中使用jQuery动态操作name问题
Aug 28 #jQuery
BootStrap入门学习第一篇
Aug 28 #Javascript
You might like
NOT NULL 和NULL
2007/01/15 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
node使用request请求的方法
2019/12/20 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
使用npy转image图像并保存的实例
2020/07/01 Python
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
入党积极分子思想汇报
2014/01/02 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
结婚邀请函范文
2014/01/14 职场文书
《长征》教学反思
2014/04/27 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
个人借条范本
2015/05/25 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python