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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
js工具方法弹出蒙版
May 08 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
vue路由插件之vue-route
Jun 13 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
vue实现动态表格提交参数动态生成控件的操作
Nov 09 Javascript
javascript实现倒计时关闭广告
Feb 09 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 header下载函数
2014/01/31 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
javascript读取xml
2006/11/04 Javascript
javascript 函数式编程
2007/08/16 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
微信小程序自定义组件
2017/08/16 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
学校安全防火方案
2014/06/07 职场文书
计生工作先进事迹
2014/08/15 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电
virtualenv隔离Python环境的问题解析
2022/06/21 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python