js實現簡單的選項卡帶滑動


選項卡切換主要依靠css3里面的新特性transform與translate的結合,如果只使用translate,不會有動畫效果;

使用定位同樣可以實現同樣的效果,但是不能實現content里的子元素高度自適應;所以選擇用translate;

如果想根據后台來設置同樣是可以的,因為這里使用的是display:flex來布局的,可以根據后台傳入的數據來均分tabs_bar;

下面直接擼代碼了,歡迎大家多多指教:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tabs選項卡</title>
</head>
<style>
#tabs_view {
width: 600px;
overflow: hidden;
}
.tabs_bar_ul{

list-style: none;
display:-webkit-flex;
-webkit-flex-flow: row;
-webkit-flex-wrap: nowrap; 
}
.tabs_bar_ul li {
flex:1;
text-align: center;
}
.tab-line-animated,.tab-content-animated {
transition:transform 0.3s cubic-bezier(0.86, 0, 0.07, 1);
}
#tabs_bar_line {
bottom: 0;
height: 4px;
width:50%;
display:block;
background:red;
width: 50%;
}
.tabs_content {
display:-webkit-flex;
-webkit-flex-flow: row;
-webkit-flex-wrap: nowrap;
}
.tabs_content_item {
flex-shrink: 0;
height:auto;
background:white;
width:100%;
}
</style>
<body>
<div id="tabs_view">
<div class="tabs_bar">
<ul class="tabs_bar_ul">
<li class="tabs_li" data-index='0' onclick="functionIndex()">tab_1</li>
<li class="tabs_li" data-index='1' onclick="functionIndex()">tab_2</li>
</ul>
</div>
<div id="tabs_bar_line" class="tab-line-animated"></div>
<div class="tabs_content tab-content-animated">
<div class="tabs_content_item">
tab1
</div>
<div class="tabs_content_item">
tab2
</div>
</div>
</div>
</body>
<script>
var lis = document.getElementsByClassName("tabs_li");
var line = document.getElementById("tabs_bar_line");
var content = document.getElementsByClassName("tabs_content")[0];
var container = document.getElementById("tabs_view");
lis[0].style.color = "red";
function functionIndex(){
for (var i = 0; i < lis.length; i++) {
lis[i].style.color = "black";
}
$this = event.target;
var index = Number($this.getAttribute("data-index"))
$this.style.color = "red";

var lineWidth  = Number(window.getComputedStyle(line,null).width.split("px")[0])
line.style.transform = "translateX("+lineWidth*1*index+"px)";

var containerWidth = Number(window.getComputedStyle(container,null).width.split("px")[0])
content.style.transform = "translateX("+-containerWidth*1*index+"px)";
}
</script>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM