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 相关文章推荐
Input 特殊事件onpopertychange和oninput
Jun 17 Javascript
jQuery 使用手册(六)
Sep 23 Javascript
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
ExpressJS入门实例
Jan 14 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
Sep 01 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
JavaScript中this的用法实例分析
Dec 19 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
npm的lock机制解析
Jun 20 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
SONY ICF-SW7600的电路分析
2021/03/02 无线电
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php中对2个数组相加的函数
2011/06/24 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php实现文件下载更能介绍
2012/11/23 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
js图片上传的封装代码
2017/08/01 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
python 处理string到hex脚本的方法
2018/10/26 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
scrapy头部修改的方法详解
2020/12/06 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
房地产还款计划书
2014/01/10 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
单位婚育证明范本
2014/11/21 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技