tab選項卡自動定位中間
- nav.vue
<template>
<div>
<div class="topic-list-inner">
<div class="nav" ref="nav">
<div class="box" v-for="(item,index) in list" @click="queryTopic(item,index)">
<div class="item" :class="{active:navActiveIndex==index}">{{item.title }}</div>
</div>
</div>
<div class="nav-right-arrow rotateUp" @click="openTagModal(list)">
<img src="./images/drop-down.png" alt="" class="drop-down" :class="{reverse:showModal}">
</div>
<!-- use the modal component, pass in the prop -->
<modal-tag v-if="showModal" @close="showModal = false" :query="queryTopic"
:my-tag="selectTag" :active-index="navActiveIndex"
></modal-tag>
<!--傳遞子元件的方法,引數-->
<!--queryTopic:方法-->
<!--selectTag:資料-->
</div>
</div >
</template>
<script>
import modalTag from 'components/navModal/navModal.vue';
import AutoScroll from 'assets/script/autoScroll'
let autoScrollInstance = null //關鍵點:在載入的外掛之前的就要定義個變數的,如果定在data中 ,則會報錯
export default {
name: 'navScroll',
data() {
return {
list: [ //自己定義的假資料,實際是獲取的資料
{title: 'AAAA', id: 1},
{title: 'BBBB', id: 2},
{title: 'CCCC', id: 3},
{title: 'DDDD', id: 4},
{title: 'EEEE', id: 5},
{title: 'FFFF', id: 6},
{title: 'HHHH', id: 7},
{title: 'MMMM', id: 8},
{title: 'RRRR', id: 9},
{title: 'QQQQ', id: 10},
{title: 'UUUU', id: 11},
{title: 'TTTT', id: 12},
{title: 'NNNN', id: 13},
{title: 'OOOO', id: 14},
{title: 'PPPP', id: 15},
{title: 'ZZZZ', id: 16},
],
navActiveIndex: 0, //當前高亮的tab選項卡index
showModal: false, //是否顯示modal
selectTag: null, //傳遞個子元件(modal)的資料的
}
},
methods: {
//
queryTopic(data, index) {
//點選誰,誰就高亮 ,定一個變數,click事件的賦值使其相等,而在:class 中 判斷是否相等,即可
this.navActiveIndex = index;
//外掛的調取方法
if (autoScrollInstance) { //確保的外掛載入成功
autoScrollInstance.scrollTo(this.$refs.nav.childNodes[index])
}
},
//點選modal的事件
openTagModal(tag) {
event.stopPropagation() //點選箭頭,阻止事件向下傳遞
this.showModal = true //modal的出現
this.selectTag = tag; //傳值給modal子元件
},
},
components: {
'modal-tag': modalTag, //元件
},
mounted() {
//寫在掉介面的裡面的
this.$nextTick(() => {
autoScrollInstance = new AutoScroll(this.$refs.nav, {spaceBetween: 0})//節點 nav
})
}
}
</script>
<style lang="scss" scoped>
.topic-list-inner {
width: 100%;
position: fixed;
top: 0;
left: 0;
background: #fff;
}
.nav {
display: flex;
width: 7rem;
overflow-x: auto;
overflow-y: hidden;
.box {
white-space: nowrap;
font-size: 0.3rem;
padding: 0 0.3rem;
height: 0.9rem;
line-height: 0.9rem;
color: #333333;
.item {
height: 100%;
&.active {
color: #fe3e62;
border-bottom: 1.5px solid #fe3e62;
}
}
}
}
.nav-right-arrow {
position: fixed;
right: 0;
top: 0;
width: 1rem;
height: 0.9rem;
/*background: #fff;*/
background-image: linear-gradient(to right, rgba(#fff, 0), #fff 30%, #fff);
display: flex;
align-items: center;
justify-content: center;
.drop-down {
width: 0.22rem;
/*padding-top: 0.35rem;*/
/*margin-left: 0.22rem;*/
transform: rotate(0deg);
transition: all 0.5s;
&.reverse {
transform: rotate(-180deg);
}
}
}
</style>
- navModal.vue
<template>
<transition name="modal">
<div class="modal-mask" @click="$emit('close')">
<div class="modal-wrapper">
<div class="modal-container cf">
<div v-for='(list,index) in myTag' class="list-title"
@click="query(list,index)"
:class="{active:activeIndex===index}">
{{list.title}}
</div>
</div>
</div>
</div>
</transition>
</template>
<script type="text/babel">
export default {
props: ['myTag', 'activeIndex', 'query'], //接受父元件 方法 資料
data() {
return {
navActiveIndex: 0, //初始化預設
}
},
mounted() {
},
methods: {}
}
</script>
<style scoped lang="scss">
.modal-mask {
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
/*background-color: rgba(0, 0, 0, .5);*/
/*display: table;*/
transition: opacity .3s ease;
}
.modal-wrapper {
/*display: table-cell;*/
/*vertical-align: middle;*/
padding-top: 0.91rem;
}
.modal-container {
width: 100%;
margin: 0 auto;
background-color: #fff;
/*box-shadow: 0 2px 8px rgba(0, 0, 0, .33);*/
transition: all .3s ease;
padding: 0 0.1rem 0.4rem 0.22rem;
font-family: Helvetica, Arial, sans-serif;
.list-title {
color: #666;
border-radius: 4px;
font-size: 0.26rem;
border: 1px solid #999;
height: 0.57rem;
width: 1.93rem;
text-align: center;
float: left;
line-height: 0.57rem;
margin: 0.4rem 0.2rem 0 0.2rem;
&.active {
color: #fe3e62;
border: 1.5px solid #fe3e62;
}
}
}
.myTagClose {
color: #fff;
font-size: 0.6rem;
margin: 0.4rem auto 0 auto;
height: 1rem;
width: 1rem;
text-align: center;
}
.modal-default-button {
float: right;
}
.modal-enter {
opacity: 0;
}
.modal-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.modal-enter .modal-container,
.modal-leave-active .modal-container {
transform: translateY(-0.9rem);
opacity: 0;
}
</style>
- autoScroll.js
export default function autoScroll(dom,options){
var options=options||{};
var defaults={
spaceBetween:15,
duration:600,
};
var settings = $.extend( {}, defaults, options );
var $container = $(dom);
var $item = $container.children();
$item.css({
margin:"0 0"
});
$item.first().css({
"margin-left":"0"
});
$item.last().css({
"margin-right":"0"
});
var _this=this;
var cW = $container.outerWidth();
$item.on('click',function(){
scrollTo(this);
});
this.scrollTo=function(dom){
scrollTo(dom);
};
function scrollTo(dom){
//console.log($container.get()[0].scrollWidth);
//console.log($(this).position().left);
var itemPL=$(dom).position().left;
var containerSl=$container.scrollLeft();
var itemW=$(dom).outerWidth();
var containerW=$container.outerWidth();
//console.log(containerW)
//var d=$container.scrollLeft();
//$container.animate({scrollLeft: itemPL+containerSl-containerW/2+itemW/2}, 800);
$container.animate({scrollLeft: itemPL+settings.spaceBetween+containerSl-containerW/2+itemW/2}, settings.duration);
}
}
相關推薦
tab選項卡自動定位中間
nav.vue <template> <div> <div class="topic-list-inner"> <div
Tab選項卡 自動切換效果js實現
one asc hidden abs 公告 turn get 實現 pla try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <
用angular中的ng-repeat和ng-show來實現tab選項卡
new angular lis content padding col ora ack 顯示 雖然我們可以用angular中的路由來做tab選項卡,但是那會讓我們建立很多的頁面來引入,或者建立 <script type="text/ng-template" id="n
自創簡易CSS Tab 選項卡
選中 dem top ive load fun .cn click 綜合 前段時間我註冊了 w3c.run域名,打算做一個W3C相關技術在線試驗工具。沒錯,就是在線編寫html、css、js代碼然後在線運行,查看效果。 在設計首頁時,我打算首頁提供三個代碼編輯器,介於界面大
原生JS畫的tab選項卡
記錄 bsp back height 原生js .class lis get function 記錄一下原生js寫的tab選項卡 鼠標滑入可以切換圖片 離開之後自動切換 <!DOCTYPE html> <html lang="en"> &l
Tab選項卡 延遲切換效果js實現
ext 0ms 分享 規則 .get 內容 char out try try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t
一個頁面多個tab選項卡效果
結果 菜鳥 提升 ref -a 搜索引擎 flow .cn www. 新整理同一個頁面多個tab選項卡,由於不會自己些代碼,只能從網上找現成的來改。留著備用。 共3部分,HTML、CSS、JS 暫時沒有演示地址和下載地址,以後會補上。 HTML部分 <!DOCTY
使用jq實現tab選項卡
選項卡 mov 選項 function spa color fun () dex jq代碼 $(‘#fenlei_title span‘).click(function() { $("#fenlei_title span").eq($(this).
tab選項卡動態滑動效果
ref nav css引入 選項 important script 滑動效果 tab選項卡 port css引入:style.css 樣式可自己更改 html 結果和class: <div class="navBar"> <ul
layui 的Tab選項卡
申請 www. yui TE http bbr -s pre clas http://www.layui.com/doc/element/tab.html <#--start--> <div class="layui-tab layui-tab-
AxureRP分頁簽 / Tab選項卡切換功能~
info 雙擊 加背景 編輯 alt idt 拖動 選項卡切換 調整 最終結果圖如下: 實現過程: 1、從元件庫中拖一個動態面板,調整所需大小,接下來的步驟都通過雙擊動態面板來完成。 2、雙擊動態面板,彈出框“面板狀態管理”,新建狀態並命名。此處新建了TAB1、TAB2、T
vue tab選項卡
border ear cti cdn none box line use port <!DOCTYPE html> <html> <head> <meta charset="utf-8" />
Tab選項卡
message mes 分享 present data tab選項卡 選項 ria tin <div> <ul class="nav nav-tabs" role="tablist"> <li role="presentation"
DOM操作相關案例 模態對話框,簡易留言板,js模擬選擇器hover,tab選項卡,購物車案例
order 選擇器 點擊 ttr 選擇 this 鼠標懸停 pos 清空 1.模態框案例 需求: 打開網頁時有一個普通的按鈕,點擊當前按鈕顯示一個背景圖,中心並彈出一個彈出框,點擊X的時候會關閉當前的模態框 代碼如下: <!DOCTYPE html> &l
layui從子iframe打開父iframe的tab選項卡
link script frame manage ++ name 父iframe jquer con 數據表格字段: {field: ‘novelId‘, title: ‘小說ID‘,width:100,templet: ‘<div><a href="ja
JavaScript插件制作-tab選項卡
++ doctype 500px clear win remove 制作 getattr hover JavaScript插件制作練習-鼠標劃過選項卡切換圖片 <!DOCTYPE html> <html> <head>
Axure RP7.0製作Tab選項卡
1.建立一個命名為Tab的動態面板,新增兩個state 2.在state1中新增如下圖元件,並且在“新聞資訊”的按鈕上新增事件,設定動態面板狀態為state2。為了區分,將按鈕樣式要設定不一樣。 3.在state2中新增如下圖元件,並且在“最新公告”的按鈕上新增事件,設
layui學習--tab選項卡
var element; var $; layui.use(['element','jquery'],function(){ element = layui.element, $ = layui.jquery; //監聽左側選單點選 element.on(
微信小程式-滾動Tab選項卡
前言:今天呢 給大家詳細講解一下滾動Tab選項卡:左右可滑動切換的效果,希望對大家做專案時候有用! 以前也遇到過這個,但是沒有做記錄。轉載來源於:https://www.jianshu.com/p/94849f9c2ff2 一、wxml結構 tab標題因一排八個,所以使用 scroll
小程式tab選項卡
造輪子啦 ! 造輪子啦!!造輪子啦!!!重要的事情說三遍!!!! wxml: <view class='tab'> <view class='{{tag == index?"true":"false"}}' wx:for='{{4}}'