日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue實現tab標簽(標簽超出自動滾動)

瀏覽:33日期:2022-09-29 11:57:54

當創建的tab標簽超出頁面可視區域時自動滾動一個tab標簽距離,并可手動點擊滾動tab標簽,實現效果請看GIF圖

效果預覽GIF圖

vue實現tab標簽(標簽超出自動滾動)

<template> <div class='main-box'><button @click='add'>添加</button><div class='main-box-tab'> <i @click='previous'><<</i> <i @click='next'>>></i> <div ref='tabs'><div class='main-box-tab-roll'> <div v-for='(item,index) in tabs' :key='index' : @click.stop='clickTab(item.name,index)'><span>{{item.meta.title}}</span><i @click.stop='close(item.name)'></i> </div></div> </div></div><div class='main-box-content'> <div>{{actionName}}</div></div> </div></template><script> export default {name: 'index',data() { return {tabs: [],moveX: 0,count: 1,unoccupied: 0,tabsCount: 0,actionName: ’test1’ }},watch: { actionName(val) {let len = this.tabs.length// 如有重復數據退出后續函數執行for (let i = 0; i < len; i++) { if (this.tabs[i].name === val) {this.$nextTick(() => { this.translateX((i + 1 - this.tabsCount) * this.width - this.unoccupied)})return }}this.tabs.push({ name: `test${this.count}`, meta: {title: `test${this.count}` }})this.$nextTick(() => { // (總共有多少個tabs - 未偏移時可見的元素個數) * 單個tab標簽元素長度 - 被遮擋tab元素的可見部分的寬度 this.translateX((this.tabs.length - this.tabsCount) * this.width - this.unoccupied)}) }},mounted() { this.tabs.push({name: `test${this.count}`,meta: { title: `test${this.count}`} }) this.$nextTick(() => {let tabs = this.$refs.tabslet getStyle = getComputedStyle(tabs.children[0].children[0], null)let marginLeft = parseFloat(getStyle.marginLeft.substr(0, getStyle.marginLeft.length - 2))let marginRight = parseFloat(getStyle.marginRight.substr(0, getStyle.marginRight.length - 2))// 元素實際寬度 = 元素的寬度 + 外邊距this.width = marginLeft + marginRight + tabs.children[0].children[0].offsetWidth/** * 以下注釋計算方式用于理解實現邏輯 **/// // 可視區域能放入多少個元素 = 可視區域的寬度 / 子元素實際寬度// let num = tabs.offsetWidth / this.width// // 被遮擋tab元素的可見部分的寬度 = 可見區域的寬度 - (子元素實際寬度 * num轉為整數)// this.unoccupied = tabs.offsetWidth - (this.width * parseInt(num))// 最終精簡為取余(得數跟上面的計算是一樣的)this.unoccupied = tabs.offsetWidth % this.width// 轉為整數this.tabsCount = parseInt(tabs.offsetWidth / this.width) })},methods: { add() {this.count++this.actionName = `test${this.count}` }, /** * 切換tab標簽頁 **/ clickTab(name) {if (this.actionName !== name) { this.actionName = name} }, /** * 關閉tab標簽頁 **/ close(name) {let len = this.tabs.lengthlet jumpName = nullif (len > 1) { for (let i = 0; i < len; i++) {if (this.tabs[i].name === name) { this.tabs.splice(i, 1) jumpName = this.tabs[i ? i - 1 : 0].name if (this.actionName !== jumpName && name === this.actionName) {this.actionName = jumpName } this.$nextTick(() => {this.previous() }) return} }} }, /** * 往右偏移 **/ next() {// scrollWidth獲取不準確// 使用this.width * this.tabs.length計算出總長度let totalWidth = this.width * this.tabs.lengththis.$nextTick(() => { let dom = this.$refs.tabs // 可視區域 < 滾動區域(滾動區域大于可視區域才可以移動) // 移動距離 + 可視區域 = 滾動區域的寬度(上一次的寬度,當點擊時才是實際寬度)< 滾動區域 if (dom.clientWidth < totalWidth && this.moveX + dom.clientWidth < totalWidth) {// this.moveX為0減去空余空間的寬度this.moveX += this.moveX ? this.width : this.width - this.unoccupiedthis.translateX(this.moveX) }}) }, /** * 往左偏移 **/ previous() {if (this.moveX > 0) { this.moveX -= this.width this.translateX(this.moveX)} }, /** * 開始移動dom **/ translateX(x) {this.moveX = x < 0 ? 0 : xthis.$refs.tabs.children[0].style.transform = `translateX(-${this.moveX}px)` }} }</script><style lang='scss' scoped> .main-box {height: 500px;width: 500px;padding: 10px 20px 20px 20px;.main-box-tab { position: relative; padding: 10px 20px; overflow: hidden; & > i {position: absolute;cursor: pointer;bottom: 15px;&:nth-child(1) { left: 0;}&:nth-child(2) { right: 0;} } .main-box-tab-content {overflow: hidden;.main-box-tab-roll { transition: transform .5s; display: flex; align-items: center; div {flex-shrink: 0;cursor: pointer;width: 130px;height: 25px;margin: 0 5px;display: flex;align-items: center;justify-content: space-between;span, i { font-size: 12px;}span { margin-left: 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}i { margin-right: 10px;} }} } .tab-item {color: #cccccc;background-color: rgba(255, 255, 255, .5);border-radius: 0 1px 0 1px;border: 1px solid #052141; } .tab-item-action {color: #ffffff;background: rgba(0, 180, 255, 0.8);border-radius: 0 1px 0 1px;border: 1px solid #1E2088; }}.main-box-content { height: calc(100% - 70px); padding: 10px; border: 1px saddlebrown solid; background-size: 100% 100%;} }</style>

到此這篇關于vue實現tab標簽(標簽超出自動滾動)的文章就介紹到這了,更多相關vue tab標簽 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄色不卡一区| 欧美片第1页| 91久久黄色| 免费在线观看精品| 亚洲精品看片| 国产精品大片| 伊人久久av| 亚洲综合精品| 国产精品中文字幕亚洲欧美| 成人在线超碰| 黄色亚洲大片免费在线观看| 日韩欧美中文字幕一区二区三区 | 国产精品亚洲欧美一级在线| 国产情侣久久| 日本黄色精品| 久久99伊人| 国产另类在线| 999国产精品视频| 综合视频一区| 水蜜桃久久夜色精品一区| 欧美日韩国产高清电影| 日韩有吗在线观看| 成人欧美一区二区三区的电影| 国产精品毛片在线看| 国产精品亚洲二区| 激情偷拍久久| 青青草精品视频| 国产不卡av一区二区| 欧美成人日韩| 国产精品一区二区中文字幕| 99tv成人| 国产欧美一区二区三区精品观看| 日韩精品诱惑一区?区三区| 国产精品丝袜xxxxxxx| 国产精品www.| 亚洲欧美网站| 91视频精品| 日韩不卡手机在线v区| 少妇久久久久| 欧美国产免费| 亚洲精品一二三**| 激情综合网址| 成人亚洲精品| 日韩精品亚洲专区| 99久久99视频只有精品| 国产精品久久久久77777丨| 欧美粗暴jizz性欧美20| 麻豆视频久久| 日本aⅴ免费视频一区二区三区| 久久国产精品成人免费观看的软件| 国产一卡不卡| 爽好久久久欧美精品| av综合电影网站| 国产精品99精品一区二区三区∴ | 黄色网一区二区| 亚洲我射av| 久久亚洲国产精品尤物| 综合一区二区三区| 欧美女激情福利| 精品日韩视频| 国产成人精选| 国产极品一区| 久久国内精品自在自线400部| 天堂成人免费av电影一区| 久久精品电影| 亚洲精品在线影院| 国产精品伦理久久久久久| 国产精品片aa在线观看| 五月国产精品| 中文字幕av一区二区三区四区| 欧美~级网站不卡| 国产一区一一区高清不卡| 日日摸夜夜添夜夜添国产精品| 99亚洲精品| 亚洲欧洲午夜| 一本色道久久精品| 中国女人久久久| 最新亚洲一区| 蜜桃成人av| 91精品一区二区三区综合| 精品国产免费人成网站| 成人在线免费观看网站| 精品三区视频| 岛国精品一区| 久久久久免费| 麻豆理论在线观看| 国产精品99精品一区二区三区∴| 亚洲一级淫片| 亚洲精品大全| 人人精品久久| 国产精品一区高清| 国产精品成人一区二区网站软件| 国产情侣一区| 精品免费av一区二区三区| 精品久久久亚洲| 精品视频高潮| 欧美sss在线视频| 激情六月综合| 男女激情视频一区| 日韩激情综合| 国产精品magnet| 国产福利亚洲| 国产成人1区| 欧美日韩视频免费观看| 久久国产亚洲| 另类国产ts人妖高潮视频| 亚洲一二av| 国产亚洲精品精品国产亚洲综合| 国产精品国码视频| 成人在线黄色| 国产一区亚洲| 久久国产88| 日韩精品亚洲一区二区三区免费| 欧美啪啪一区| 国产h片在线观看| 激情五月综合| 亚洲我射av| 欧美日韩在线精品一区二区三区激情综合 | 日本亚洲视频在线| 91大神在线观看线路一区| 麻豆国产精品777777在线| 日韩电影免费在线观看| 午夜精品免费| 欧美一区不卡| 成人三级高清视频在线看| 亚洲国产一区二区在线观看 | 久久精品国产99| 91精品国产91久久久久久黑人| 亚洲综合日韩| 国产欧美日韩精品一区二区免费| 欧美www视频在线观看| 欧美大黑bbbbbbbbb在线| 日韩中文字幕在线一区| 精品亚洲自拍| 99riav国产精品| 国产欧美自拍一区| 久久久精品网| 蜜臀久久99精品久久久久久9| 国产欧美日韩一级| 美女网站一区| 国产精品www994| 日韩视频一区二区三区在线播放免费观看| 欧美永久精品| 亚洲精品一区二区在线看| 国产精品天天看天天狠| 亚洲性图久久| 国产精品对白久久久久粗| 不卡在线一区| 精品国产不卡| 日本在线不卡视频| 蜜桃国内精品久久久久软件9| 国产精品chinese| 一本一本久久| 日本一区二区高清不卡| 玖玖精品视频| 国产精品高颜值在线观看| 亚欧成人精品| jiujiure精品视频播放| 精品一区二区三区中文字幕在线| 日韩在线观看一区二区| 欧美日韩视频免费观看| 国产精品网址| 亚洲欧美高清| 日韩深夜视频| 国产精品xxx在线观看| 蜜臀91精品一区二区三区| 日韩欧美自拍| 国产精品一区二区精品| 亚洲少妇诱惑| 夜鲁夜鲁夜鲁视频在线播放| 国产精品一区三区在线观看| 亚洲深深色噜噜狠狠爱网站| 国内精品福利| 色在线视频观看| 国产精品magnet| 日韩精品一级| 中文字幕乱码亚洲无线精品一区| 美女久久久久| 久久一区二区中文字幕| 91亚洲国产成人久久精品| 国产精品v日韩精品v欧美精品网站| 午夜久久av| 久久国产99| 亚洲精品1区| 亚洲精品电影| 欧美~级网站不卡| 久久国产影院| 日韩中文视频| 日韩欧美在线中字| 国产精品久久久久久久免费观看 | 97久久中文字幕| 免费国产亚洲视频| 黄色成人精品网站| 亚洲香蕉网站| 免费不卡中文字幕在线| 久久久天天操| 免费黄色成人| 国产毛片一区| 石原莉奈在线亚洲二区| 夜夜嗨一区二区三区|