JavaScript 实现响应式手风琴图片轮播效果
作者:闭包旅人时间:2026-10-23 23:25:24浏览:609
本文提供基于 jQuery 的手风琴图片轮播特效完整代码。通过 HTML 构建列表结构,CSS 控制布局与初始状态,JS 监听点击事件并动态计算宽度与位置,实现点击展开、其余收缩的交互效果。
手风琴特效实现概述
本文分享了一段使用 JavaScript 实现手风琴特效的完整代码示例,供读者参考学习。
实际运行效果如下图所示。

HTML 结构搭建
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>手风琴</title>
<link rel="stylesheet" href="index.css" rel="external nofollow" >
</head>
<body>
<div class="wrapper">
<ul class="wrapUl">
<li>
<div class="title">
<h1>温泉酒店</h1>
</div>
<div class="picBox picBox1"></div>
<div class="decration">有谁不爱泡温泉?浸入雾气蒸腾的泉水之中,把身体泡成一片茶叶,舒展轻盈。有比这更美妙的感觉吗?</div>
</li>
<li>
<div class="title">
<h1>时尚酒店</h1>
</div>
<div class="picBox picBox2"></div>
<div class="decration">浪漫,是香闺围笼,是灯火迷离,泪眼婆裟的唯美,是杨柳岸、晓风残月中的无语凝噎……</div>
</li>
<li>
<div class="title">
<h1>设计师酒店</h1>
</div>
<div class="picBox picBox3"></div>
<div class="decration">前卫的酒店设计理念,独具魅力的风格,优美的自然风光才能有这样顶级的酒店</div>
</li>
<li>
<div class="title">
<h1>青年旅店</h1>
</div>
<div class="picBox picBox4"></div>
<div class="decration">我为你煮一杯温茶,斟一杯美酒。让我们席地而坐,听你的梦想。用你的只言片语装点我们的梦想博物馆</div>
</li>
<li>
<div class="title">
<h1>民宿客栈</h1>
</div>
<div class="picBox picBox5"></div>
<div class="decration">在这里,你可以静静发呆,而不被人打扰;在这里,你能看见最美好的星星,能让你找到最深的感动</div>
</li>
<li>
<div class="title">
<h1>海岛酒店</h1>
</div>
<div class="picBox picBox6"></div>
<div class="decration">不想过冬,厌倦沉重,就飞去热带的岛屿游泳,卸下包袱,放下压力,在这碧海蓝天之中</div>
</li>
<li>
<div class="title">
<h1>海外酒店</h1>
</div>
<div class="picBox picBox7"></div>
<div class="decration">因地形地质的区别,世界各地的温泉也千差万别,选择一处适合自己的温泉,你会忘记世界</div>
</li>
</ul>
</div>
<script src="jquery.js"></script>
<script src="index.js"></script>
</body>
</html>
以下是实现该效果所需的 JavaScript 逻辑代码。
JavaScript 交互逻辑
var oUl = $('ul'),
oLi = $('li'),
len = oLi.length,
width = parseInt(oUl.css('width')),
gw = width / len,
ot = Math.floor((width - 400) / (len - 1));
flag = true;
function init(){
if(flag){
change($(oLi[len-1]));
}
}
function bindEvent(){
oLi.on('click',function(){
change($(this));
if(($(this).index() +1) == len){
flag = false;
}else{
flag = true;
}
});
oUl.on('mouseleave',function(){
init();
})
}
function change(event){
event.animate({
'width':'400px'
},300,'linear').siblings().animate({
'width':ot + 'px'
},300,'linear');
event.find('.title').css({
'display':'none'
})
event.siblings().find('.title').css({
'display':'block'
})
event.find('.decration').css({
'bottom':'0px'
})
event.siblings().find('.decration').css({
'bottom':'-50px'
})
}
init();
bindEvent();
配合使用的 CSS 样式代码如下。
CSS 样式控制
*{
margin:0;
padding:0;
list-style:none;
}
body{
background-color:#333;
}
.wrapper{
width:80%;
margin:50px auto;
padding:40px;
}
.wrapper ul{
width:100%;
height:300px;
overflow: hidden;
}
.wrapper ul li{
float: left;
width:14.2;
height:260px;
position:relative;
overflow:hidden;
cursor:pointer;
}
.picBox{
width:100%;
height:100%;
}
.picBox1{
background:url(images/1.jpg) no-repeat center 0;
}
.picBox2{
background:url(images/2.jpg) no-repeat center 0;
}
.picBox3{
background:url(images/3.jpg) no-repeat center 0;
}
.picBox4{
background:url(images/4.jpg) no-repeat center 0;
}
.picBox5{
background:url(images/5.jpg) no-repeat center 0;
}
.picBox6{
background:url(images/6.jpg) no-repeat center 0;
}
.picBox7{
background:url(images/7.jpg) no-repeat center 0;
}
.wrapper ul li .title{
position:absolute;
overflow:hidden;
width:100%;
height:100%;
left:0;
top:0;
background:rgba(0,0,0,0.5);
}
.wrapper ul li .title h1{
color:#fff;
width:30px;
margin:0 auto;
display:block;
font:20px;
padding-top:30px;
opacity:0.8;
}
.wrapper ul li .decration{
width:400px;
height:40px;
padding-left:20px;
padding-right:30px;
position:absolute;
left:0;
bottom:-50px;
background:rgba(0,0,0,0.3);
color:#FFF;
}
以上内容即为手风琴特效的全部实现细节,希望对读者的学习有所帮助,欢迎继续支持本站。
作者最新文章
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
