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同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. ...
随机推荐
- Transform LiveData
查询资料的其中一个场景: 创建一个回调函数,当查询后台的时候,后台有结果了,回调对应的回调函数,并将结果保存到LiveData中. public class DataModel { ... ...
- RESTful架构与RPC架构
RESTful架构与RPC架构 在RESTful架构中,关注点在于资源,操作资源时使用标准方法检索并操作信息片段,在RPC架构中,关注点在于方法,调用方法时将像调用本地方法一样调用服务器的方法. RE ...
- 解决putty连接报 connection refused
Ubuntu中换个速度快点的源后 执行 $sudo apt-get install openssh-server 安装ssh协议 执行ifconfig显示Ubuntu的ip地址 xp中用putty输入 ...
- 《系列二》-- 2、bean 的作用域: Scope 有哪些
目录 作用域 Scope 特性概述 常规作用域 web 场景作用域 经典问题 模拟场景 解决办法 方法一 方法二 实现接口 BeanFactoryAware 阅读之前要注意的东西:本文就是主打流水账式 ...
- Go语言并发编程(4):sync包介绍和使用(下)-Once,Pool,Cond
sync包下:Once,Pool,Cond 一.sync.Once 执行一次 Once 简介 sync.Once 是 Go 提供的让函数只执行一次的一种实现. 如果 once.Do(f) 被调用多次, ...
- 搜索引擎RAG召回效果评测MTEB介绍与使用入门
RAG 评测数据集建设尚处于初期阶段,缺乏针对特定领域和场景的专业数据集.市面上常见的 MS-Marco 和 BEIR 数据集覆盖范围有限,且在实际使用场景中效果可能与评测表现不符.目前最权威的检索榜 ...
- django1.11和django2.2中namespace的用法
django1.11中namespace用法 urlpatterns = [ url(r'^user/', include('user.urls', namespace='user')) ] djan ...
- Nebula Graph 源码解读系列|客户端的通信秘密——fbthrift
概述 Nebula Clients 给用户提供了多种编程语言的 API 用于和 Nebula Graph 交互,并且对服务端返回的数据结构进行了重新封装,便于用户使用. 目前 Nebula Clien ...
- C/C++ 的 指针/引用 传参
#include <stdio.h> //指针传值 void addOne(int *a) { printf("%8p\n",a); *a = *a+1; } //引用 ...
- CSP 2023 My Codes
T1 小苹果 题目描述 小 Y 的桌子上放着 \(n\) 个苹果从左到右排成一列,编号为从 \(1\) 到 \(n\). 小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果. 每天在拿的时候,小苞都是 ...