什麼是slideToggle()?
slideToggle()是jQuery提供的一個滑動效果方法,它可以在slideUp()和slideDown()之間自動切換。簡單説,就是點擊一下,元素會"滑動"地顯示或隱藏,而不是突然出現或消失。
💡 小知識:和普通的toggle()不同,slideToggle()是垂直方向的滑動效果,而toggle()是水平方向的切換。
語法
$(selector).slideToggle(speed, easing, callback)
- speed:可選參數,規定滑動速度。可以是"slow"、"fast"或毫秒數(如1000)。
- easing:可選參數,規定動畫速度曲線。默認是"swing"(開始和結束慢,中間快),也可以是"linear"(勻速)。
- callback:可選參數,動畫完成後要執行的函數。
基本使用示例
示例1:最簡單的滑動切換
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>slideToggle基本用法</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<style>
#content {
background: #f0f0f0;
padding: 20px;
border: 1px solid #ccc;
margin-top: 10px;
display: none; /* 初始隱藏 */
}
button {
padding: 8px 15px;
background: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
</style>
</head>
<body>
<button id="toggleBtn">點擊切換內容</button>
<div id="content">
<h3>滑動效果演示</h3>
<p>這是通過jQuery slideToggle()方法控制的內容區域,點擊按鈕可以看到滑動效果哦!</p>
</div>
<script>
$(document).ready(function() {
$("#toggleBtn").click(function() {
$("#content").slideToggle(500); // 500毫秒的滑動效果
});
});
</script>
</body>
</html>
示例2:使用不同速度參數
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>slideToggle速度參數</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<style>
#panel {
background: #e0f7fa;
padding: 20px;
border: 1px solid #00bcd4;
margin-top: 10px;
display: none;
}
</style>
</head>
<body>
<button id="slowBtn">慢速切換 (slow)</button>
<button id="normalBtn">正常速度 (默認)</button>
<button id="fastBtn">快速切換 (fast)</button>
<div id="panel">
<p>這是滑動面板內容</p>
</div>
<script>
$(document).ready(function() {
$("#slowBtn").click(function() {
$("#panel").slideToggle("slow");
});
$("#normalBtn").click(function() {
$("#panel").slideToggle();
});
$("#fastBtn").click(function() {
$("#panel").slideToggle("fast");
});
});
</script>
</body>
</html>
判斷元素展開/摺疊狀態
有時我們需要知道元素當前是展開還是摺疊狀態,比如根據狀態顯示不同的按鈕文字。以下是兩種實用方法:
方法1:使用回調函數判斷
$(document).ready(function() {
$("#statusBtn").click(function() {
$("#statusPanel").slideToggle(300, function() {
if ($(this).is(":visible")) {
$("#statusBtn").text("點擊收起");
console.log("面板已展開");
} else {
$("#statusBtn").text("點擊展開");
console.log("面板已摺疊");
}
});
});
});
方法2:使用狀態類(推薦)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>判斷slideToggle狀態</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<style>
#statusPanel {
background: #e8f5e9;
padding: 20px;
border: 1px solid #4caf50;
margin-top: 10px;
display: none;
}
.opened {
background: #c8e6c9;
}
</style>
</head>
<body>
<button id="statusBtn">點擊展開</button>
<div id="statusPanel">
<p>這是可以展開/摺疊的面板</p>
</div>
<script>
$(document).ready(function() {
const statusClass = "opened";
$("#statusBtn").click(function() {
const $panel = $("#statusPanel");
$panel.slideToggle(300, function() {
if ($panel.is(":visible")) {
$panel.addClass(statusClass);
$("#statusBtn").text("點擊收起");
} else {
$panel.removeClass(statusClass);
$("#statusBtn").text("點擊展開");
}
});
});
});
</script>
</body>
</html>
實用技巧
- 初始隱藏:確保要滑動的元素初始是隱藏的,可以使用CSS
display: none。 - 結合其他效果:可以和fadeIn/fadeOut等效果結合,實現更豐富的動畫。
- 多個元素:可以給多個元素綁定slideToggle,比如實現菜單的摺疊效果。
- 使用回調函數:在動畫完成後執行特定操作,比如更新UI或發送請求。
為什麼用slideToggle()而不是toggle()?
正如知識庫裏提到的:
"slideToggle()是垂直方向的滑動效果,而toggle()是水平方向的切換。"
所以,如果你想要一個自然的、像抽屜一樣上下滑動的效果,slideToggle()就是你的最佳選擇!