以谷歌翻譯標簽按鈕為例,當我們點擊一種語言時,該語言下的藍線會從之前點擊的語言移動到當前點擊的語言。
在css中,我可以看到一個類被刪除/添加到活動/非活動標簽按鈕中,它控制按鈕內一段時間的不透明度,手動設置不透明度會使線條出現,但不會產生任何動畫效果。
同樣,如果我在包含該行的span上設置overflow:hidden,動畫將不再從上一個tab按鈕開始,但是我沒有看到js設置任何right或left,所以必須使用其他東西。
有人知道點擊標簽按鈕時這條線移動的秘密嗎?
我想你的意思是這樣的。
function moveLine(button) {
var tabButtons = document.querySelectorAll('.tab-button');
var line = document.querySelector('.line');
// Remove 'active' class from all buttons
tabButtons.forEach(function(tabButton) {
tabButton.classList.remove('active');
});
// Add 'active' class to the clicked button
button.classList.add('active');
// Calculate the left position of the active button
var activeButtonRect = button.getBoundingClientRect();
var containerRect = button.parentNode.getBoundingClientRect();
var offsetLeft = activeButtonRect.left - containerRect.left;
// Apply the transform to move the line
line.style.transform = 'translateX(' + offsetLeft + 'px)';
}
.tab-container {
position: relative;
display: flex;
}
.tab-button {
background: none;
border: none;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
transition: opacity 0.3s;
}
.tab-button.active {
opacity: 1;
}
.line {
position: absolute;
width: 100px;
height: 3px;
background-color: blue;
transition: transform 0.3s;
}
body {
background-color: aqua;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<div class="tab-container">
<button class="tab-button active" onclick="moveLine(this)">Button 1</button>
<button class="tab-button" onclick="moveLine(this)">Button 2</button>
<button class="tab-button" onclick="moveLine(this)">Button 3</button>
<div class="line"></div>
</div>
<script src="app.js "></script>
</body>
</html>
上一篇c 模擬解析json
下一篇react代碼轉vue