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 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
js中eval详解
Mar 30 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
模板视图和AngularJS之间冲突的解决方法
Nov 22 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
vue2.0 路由不显示router-view的解决方法
Mar 06 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
原生js实现公告滚动效果
Jan 10 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速度全攻略
2006/10/09 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
JavaScript DOM基础
2015/04/13 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
vue.js项目nginx部署教程
2018/04/05 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
javascript实现计算器功能
2020/03/30 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
金融专业个人求职信
2013/09/22 职场文书
法律七进实施方案
2014/03/15 职场文书
会议欢迎标语
2014/06/30 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
美术教师个人工作总结
2015/02/06 职场文书
建党伟业电影观后感
2015/06/01 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书