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 相关文章推荐
用javascript做拖动布局的思路
May 31 Javascript
Js四则运算函数代码
Jul 21 Javascript
jquery+json实现数据列表分页示例代码
Nov 15 Javascript
Javascript writable特性介绍
Feb 27 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
分享12个非常实用的JavaScript小技巧
May 11 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 Javascript
JS实现的全排列组合算法示例
Oct 09 Javascript
vue实现行列转换的一种方法
Aug 06 Javascript
js blob类型url的视频下载问题的解决
Nov 29 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
安装Python的教程-Windows
2017/07/22 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
什么是数据抽象
2016/11/26 面试题
革命英雄事迹演讲稿
2014/09/13 职场文书
中小企业员工手册范本
2015/05/14 职场文书
运动会通讯稿600字
2015/07/20 职场文书
教师教育心得体会
2016/01/19 职场文书