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解决innerText浏览器兼容问题思路代码
May 17 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
Aug 13 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
js中this的用法实例分析
Jan 10 Javascript
全面解析Bootstrap图片轮播效果
Dec 03 Javascript
jQuery简单实现提交数据出现loading进度条的方法
Mar 29 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 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登陆页的密码处理方式分享
2013/10/14 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
Python3 queue队列模块详细介绍
2018/01/05 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
自主招生自荐信
2013/12/08 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
联欢晚会主持词
2014/03/25 职场文书
保健品市场营销方案
2014/03/31 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers