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 相关文章推荐
js中将字符串转换成json的三种方式
Jan 12 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
基于jQuery实现的幻灯图片切换
Dec 02 Javascript
简化vuex的状态管理方案的方法
Jun 02 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
vue实现百度语音合成的实例讲解
Oct 14 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
JavaScript图像放大镜效果实现方法详解
Jun 28 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
Smarty中常用变量操作符汇总
2014/10/27 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
javascript globalStorage类代码
2009/06/04 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
django 创建过滤器的实例详解
2017/08/14 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python eventlet绿化和patch原理
2020/11/21 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
见习报告怎么写
2014/10/31 职场文书
最感人的道歉情书
2015/05/12 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
趣味运动会广播稿
2015/08/19 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
react如何快速设置文件路径别名
2021/04/28 Javascript