vue中类tabs左右滑动
效果图

思路
给定一个变量用来记录滚动了几列,每滚动一次加1滚动一列,监听页面滚动父级元素宽度改变,重新设置滚动的距离(放在计算属性中让其自动计算)
<template>
<div class="container">
<el-button @click="prev">左滑</el-button>
<div class="box" ref="box">
<div
class="wrap"
ref="wrap"
:style="{ transform: `translateX(-${scrollX}px)` }"
>
<div
v-for="(item, index) in 8"
:key="index"
:style="{ width: widthItem + 'px' }"
:class="['item', 'item' + index]"
>
滚动{{ index }}
</div>
</div>
</div>
<el-button @click="next">右滑</el-button>
</div>
</template>
<script>
// 引入 npm install element-resize-detector --save
let elementResizeDetectorMaker = require("element-resize-detector");
export default {
props: {
// 显示几列
column: {
type: Number,
default: 5
}
},
data() {
return {
// 滚动了几列
roll: 0,
// 每一列的宽度
widthItem: 0,
// 盒子总宽度
widthBox: 0
};
},
computed: {
scrollX() {
// flex布局时计算宽度,某些情况下会出现小数点,对比宽度比总宽度小1,使右滑出问题
return Math.ceil(this.roll * this.widthItem);
}
},
mounted() {
let erd = elementResizeDetectorMaker();
let _this = this;
// 监听box元素宽度改变
erd.listenTo(this.$refs.box, function(element) {
_this.widthBox = element.offsetWidth;
// 计算每一列占多少行
_this.widthItem = element.offsetWidth / _this.column;
});
},
methods: {
next() {
let widthWrap = this.$refs.wrap.offsetWidth;
if (this.widthBox + this.scrollX >= widthWrap) return;
this.roll += 1;
},
prev() {
if (this.scrollX <= 0) return;
this.roll -= 1;
}
}
};
</script>
<style scoped lang="scss">
.container {
display: flex;
width: 100%;
height: 60px;
.box {
flex: 1;
border: 1px solid skyblue;
overflow: hidden;
.wrap {
display: inline-block;
white-space: nowrap;
transition: transform 0.3s;
.item {
display: inline-block;
height: 100%;
line-height: 60px;
text-align: center;
background-color: aquamarine;
}
}
}
}
</style>
vue中类tabs左右滑动的更多相关文章
- day 86 Vue学习之八geetest滑动验证
Vue学习之八geetest滑动验证 本节目录 一 geetest前端web中使用 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 geetest前端web ...
- Vue 仿B站滑动导航
仿照B站制作的滑动导航功能,进行了部分优化,例如可定制默认选中元素,并将选中元素居中显示,可动态更改数据,可定制回调函数取的下标和选中元素内容,可根据需求制作N级联动 已开发成插件,使用方法与源码请前 ...
- day 88 Vue学习之八geetest滑动验证
本节目录 一 geetest前端web中使用 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 geetest前端web中使用 下载gt文件,官网地址,下面我 ...
- VUE中使用geetest滑动验证码
一,准备工作:服务端部署 下载文件gt.gs: https://github.com/GeeTeam/gt3-python-sdk 需要说明的是这里的gt.js文件,它用于加载对应的验证JS库. 1. ...
- vue element-ui Tabs 标签页实现【更多】功能
element-ui Tabs本身是没有更多功能的,如果在外边添加一个更多按钮,又非常不好看, 而利用API中Tabs Attributes的before-leave勾子方法可以实现这个功能, 简单P ...
- vue使用swiper模块滑动时报错:[Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example becaus
报错: vue报这个错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for ex ...
- vue 中判断页面滑动方向
- vue中使用mui滑动条无法正常滑动
需要引入 `mui.min.js` 引入之后浏览器会报错,mui.min.js中的'caller', 'callee', and 'arguments'是不严格模式的js,而webpack中是严格模 ...
- Vue中swiper手动滑动后不能自动播放的解决方法
用户操作swiper之后,是否禁止autoplay.默认为true:停止.如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay.操作包括触碰,拖动,点击pa ...
- Vue如何实现swiper左右滑动内容区控制导航tab同时切换高亮
Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. ...
随机推荐
- Python 装饰器解析(二)
前面一篇文章介绍了python装饰器,最后引入了functools.wraps的使用,本篇文章将对它进行深入的探究. functools模块提供了一系列的高阶函数以及对可调用对象的操作,其中为人熟知的 ...
- sliver生成木马.sh
生成sliver木马多个步骤合成一个sh #!/bin/bash # date: 20230222 host_ip=$1 WORK_DIR=/opt/work rm -rf /root/.sliver ...
- 程序员应具备的PS基本技能(二):程序员切图最常使用的工具组-选择工具组
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 项目实战:Qt西门子PLC通讯调试和模拟工具(包含PLC上位机通讯,PLC服务器)
前言 西门西PLC.台达触摸屏.法兰克机床等等多年以前玩得比较多,改造机床.维修机床.给机床编程等等,没事还能车个零件啥的,对于多年以前的研发改造,有时间就重新整理下. 先上点有历史年代感的 ...
- 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能
前言 视频监控.人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头. 本文章讲解海康的sdk方式. 海康 ...
- typing的中的Optional说明
from typing import Optional def show_count(count: int, singular: str, plural: Optional[str] = None) ...
- 6大数据类型之间的转换及数据在内存中的缓存机制----day03
1.自动类型转换 当2个不同类型的数据进行运算的时候,默认向更高精度转换 数据类型精度从低到高:bool < int < float <complex 1,1强制类型转换 # Nu ...
- django中的Case,When,then用法
# 参考文档 https://docs.djangoproject.com/en/2.2/ref/models/conditional-expressions/ # Case()接受任意数量的When ...
- 【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
问题描述 Azure Redis Cluster 在增加分片数时失败,错误消息为: ResponseBody: { "error": { "details": ...
- 【Azure 环境】台湾同胞:詢問大陸所有廠牌手機是否都可透過通知中心發送訊息
什么是 Azure 通知中心? Azure 通知中心提供易于使用且向外扩展的推送引擎,可用于将通知发送到任何平台 (iOS.Android.Windows.Kindle.百度等 ) 从任何后端 (云和 ...