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 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
jQuery 选择器详解
Jan 19 Javascript
Highcharts入门之简介
Aug 02 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
Oct 19 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
js/jQuery实现全选效果
Jun 17 jQuery
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
移动端JS实现拖拽两种方法解析
Oct 12 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
phpMyAdmin 安装及问题总结
2009/05/28 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
名片管理系统python版
2018/01/11 Python
python3的输入方式及多组输入方法
2018/10/17 Python
django创建简单的页面响应实例教程
2019/09/06 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Python 没有main函数的原因
2020/07/10 Python
python asyncio 协程库的使用
2021/01/21 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
游戏商店:Eneba
2020/04/25 全球购物
幼儿园中班下学期评语
2014/04/18 职场文书
推广活动策划方案
2014/08/23 职场文书
解除劳动合同协议书
2014/09/17 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
无房证明样本
2015/06/17 职场文书
公司酒会致辞
2015/07/30 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python