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 按回车键相应按钮提交事件
Nov 02 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
jQuery实现鼠标点击弹出渐变层的方法
Jul 09 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
vue watch关于对象内的属性监听
Apr 22 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 Javascript
JS三级联动代码格式实例详解
Dec 30 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
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
深入解析php之sphinx
2013/05/15 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
Python中常见的数据类型小结
2015/08/29 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python探索之自定义实现线程池
2017/10/27 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
python操作excel的方法
2018/08/16 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
什么是makefile? 如何编写makefile?
2013/01/02 面试题
创业融资计划书
2014/04/25 职场文书
校长四风对照检查材料
2014/09/27 职场文书
长江三峡导游词
2015/01/31 职场文书
2016新年年会主持词
2015/07/06 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
总结几个非常实用的Python库
2021/06/26 Python
Python 图片添加美颜效果
2022/04/28 Python