本文详细介绍如何使用HTML、CSS和jQuery实现手风琴页面效果。通过解析DOM结构、样式设置及核心JavaScript代码,重点讲解stop()方法控制动画过渡以及animate()实现宽度动态变化的原理,帮助开发者快速掌握该交互组件的开发细节。
首先展示最终实现的手风琴效果预览图。


HTML结构构建
第一步,构建基础的HTML文档结构。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>手风琴2</title>
<link rel="stylesheet" type="text/css" href="css/new_file.css" rel="external nofollow" />
<script src="js/jquery-1.10.2.min.js"></script>
<script src="js/new_file.js"></script>
</head>
<body>
<div id="gs">
<div class="gs gs1">
<div class="txt">
<p class="p1">我的旅行记1我的旅行记3</p>
<p class="p2">空山之旅我的旅行记3</p>
</div>
</div>
<div class="gs gs2">
<div class="txt">
<p class="p1">我的旅行记2我的旅行记3</p>
<p class="p2">沙漠之旅我的旅行记3</p>
</div>
</div>
<div class="gs gs3">
<div class="txt">
<p class="p1">我的旅行记3我的旅行记3</p>
<p class="p2">拉沙之旅我的旅行记3</p>
</div>
</div>
<div class="gs gs4">
<div class="txt">
<p class="p1">我的旅行记4我的旅行记3</p>
<p class="p2">雪山之旅我的旅行记3</p>
</div>
</div>
</div>
</body>
</html>
CSS样式定义
第二步,编写对应的CSS样式代码以定义外观。
*{
padding: 0px;
margin: 0px;
font-family: "微软雅黑";
}
#gs {
width: 1100px;
height: 429px;
}
.gs {
width: 100px;
height: 429px;
float: left;
}
.gs4 {
width: 789px;
height: 429px;
}
.gs1 {
background: url(../img/img/1.jpg) repeat scroll top left;
}
.gs2 {
background-image: url(../img/img/2.jpg);
}
.gs3 {
background-image: url(../img/img/3.jpg);
}
.gs4 {
background-image: url(../img/img/4.jpg);
}
.txt {
width: 100px;
height: 429px;
/*margin: 15px;*/
background: rgba(0,0,0,0.5);
cursor: pointer;
}
/*.txt p {
float: left;
width: 20px;
height: 429px;
color: #fff;
font-size: 20px;
margin: 14px;
}*/
.txt p {
color: #fff;
float: left;
margin: 15px;
}
.txt .p1 {
font-size: 14px;
width: 14px;
}
.txt .p2 {
font-size: 12px;
width: 12px;
}
JavaScript交互逻辑
第三步,添加JavaScript逻辑代码以实现交互功能。
$(function(){
$(".txt").mouseover(function(){
$(this).parent().stop(true).animate({"width":"789px"},500).siblings().stop(true).animate({"width":"100px"},500);
});
});
关键技术点解析
核心实现要点如下:
a. 字体垂直排列技巧:将字体大小(font-size)设置为与包含该字体的标签宽度(width)一致,从而实现文字的竖向显示。
b. jQuery中的stop()方法用于控制动画队列:调用stop()表示结束当前动画并允许过渡效果完成。
c. 调用stop(true)表示立即暂停当前动画,清除后续队列中的动画。
d. 调用stop(true, true)表示立即结束当前动画并跳转到最终状态,不执行过渡效果。
e. parent()方法用于获取当前元素的上一级父节点。
f. siblings()方法用于选取当前元素之外的所有同级兄弟元素。
g. animate()方法用于执行自定义的动画效果,如改变元素宽度。
以上内容涵盖了手风琴效果的核心实现逻辑,希望能为读者提供有益参考。