{{ item }} Content
实现移动端的tabs标签页,可滑动,可点击
原创
已于 2023-08-02 09:54:29 修改
·
805 阅读
·
0
·
0
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章标签:
#前端
#javascript
#css
于 2023-08-01 14:08:05 首次发布
文章描述了一个使用Vue.js编写的动态滑动导航组件,通过触屏事件控制内容块的切换,实现平滑过渡效果。内容包括组件结构、事件处理和样式设置。
v-for="(item, index) in segments"
:key="index"
:class="{ active: activeIndex === index }"
@click="handleClick(index)"
>
{{ item }}
export default {
data() {
return {
segments: ["Segment 1", "Segment 2", "Segment 3"],
activeIndex: 0,
startX: 0,
offset: 0,
offsetPx: 0,
segmentOffset: 0,
};
},
mounted() {
this.$refs.content.addEventListener("touchstart", this.handleTouchStart);
this.$refs.content.addEventListener("touchmove", this.handleTouchMove);
this.$refs.content.addEventListener("touchend", this.handleTouchEnd);
},
methods: {
handleClick(index) {
this.activeIndex = index;
this.offsetPx = this.activeIndex * this.$refs.content.clientWidth;
this.segmentOffset =
(this.activeIndex * this.$refs.segment.clientWidth) /
this.segments.length;
this.$refs.segment.style.setProperty(
"--segmentOffset",
`${this.segmentOffset}px`
);
},
handleTouchStart(event) {
this.startX = event.touches[0].clientX;
this.offset = 0;
},
handleTouchMove(event) {
this.offset = event.touches[0].clientX - this.startX;
if (
this.offsetPx >
(this.segments.length - 1) * this.$refs.content.clientWidth ||
this.segmentOffset >
(this.$refs.segment.clientWidth / this.segments.length) *
(this.segments.length - 1) ||
this.segmentOffset < 0
) {
return;
}
this.offsetPx =
this.activeIndex * this.$refs.content.clientWidth -
this.offset +
window
.getComputedStyle(this.$refs.content)
.paddingLeft.replace("px", "") *
2;
this.segmentOffset =
(this.activeIndex * this.$refs.segment.clientWidth - this.offset) /
this.segments.length;
this.$refs.segment.style.setProperty(
"--segmentOffset",
`${this.segmentOffset}px`
);
},
handleTouchEnd() {
const threshold = this.$refs.segment.offsetWidth / 4;
if (this.offset > threshold && this.activeIndex > 0) {
this.activeIndex--;
} else if (
this.offset < -threshold &&
this.activeIndex < this.segments.length - 1
) {
this.activeIndex++;
}
this.offsetPx =
this.activeIndex * this.$refs.content.clientWidth
this.segmentOffset =
(this.activeIndex * this.$refs.segment.clientWidth) /
this.segments.length;
this.$refs.segment.style.setProperty(
"--segmentOffset",
`${this.segmentOffset}px`
);
},
},
};
.segment {
width: 100%;
display: flex;
background-color: #ecf0f1;
justify-content: space-around;
transition: transform 0.3s ease-out;
transform: translateX(0);
overflow: hidden;
}
.segment div {
padding: 6px 12px;
cursor: pointer;
position: relative;
box-sizing: content-box;
margin: 4px 8px;
}
.segment div:nth-child(1):after {
position: absolute;
content: "";
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: #fefefe;
z-index: -1;
transform: translateX(var(--segmentOffset));
transition: 0.25s ease-out;
border-radius: 4px;
}
/* .segment div.active {
background-color: #e0e0e0;
} */
.content {
width: 100%;
overflow: hidden;
}
.page {
display: flex;
transition: transform 0.3s ease-out;
}
.page-item {
width: 100%;
height: 500px;
flex-shrink: 0;
padding: 20px;
background-color: #f0f0f0;
text-align: center;
font-size: 24px;
box-sizing: border-box;
}
- 2022卡塔尔世界杯体彩投注额创新高,球迷热情与理性博弈如何平衡?世界杯点燃体彩市场,单日投注额突破80亿 随着阿根廷队捧起大力神杯,2022卡塔尔世界杯落下帷幕。这场足球盛宴不仅让全球球迷热血沸腾,更...
- 《魔兽世界》怀旧服占领矿洞任务详细攻略魔兽世界占领矿洞任务怎么做?魔兽世界怀旧服已经上线有一段时间了,很多玩家都想知道WOW怀旧服怎么占领矿洞?下面,我就给大家带来详细介...
- 事业线在哪里?怎么看事业线?3、事业线断断续续的话,指的是一个人做事三心二意,没有规则性,统一性,因此事业运起起伏伏,变动次数多。 4、事业线旁边还有一条线,...
- 一个胎压传感器要多少钱一个胎压传感器的价格因多种因素而有所差异,大致在100元到1500元之间。 根据安装方式的不同,胎压传感器可分为外置和内置两种类型,外置...
- 360手机N4S值得购买入手吗 360 N4S手机全面详细评测图解360手机在上半年已经推出两款产品——“安卓小苹果”360手机f4以及“青年新旗舰”360手机N4,凭借强悍的硬件配置以及出众的质价比,在千元市...
- 一代“带刀后卫”布雷默离世!90世界杯国外的夺冠英雄!国外一代足球名宿安德烈亚斯·布雷默(Andreas Brehme)离世,终年63岁,他生涯最为人熟悉的是1990年世界杯决赛为西德射入全场唯一进球,助球队...
- 王者荣耀中如何克制兰陵王 轻松反制的英雄最近有许多小伙伴反应说兰陵王太恶心了天天被他针对,询问小编王者荣耀中如何克制兰陵王,那么本期小编推荐几位能有效克制兰陵王的英雄...
- 酱油哪个牌子质量最好?千禾酱油、鲁花酱油、光荣酱油哪家好酱油作为中式烹饪的核心调味品,其品质直接影响菜肴的风味与口感。消费者在选择时,往往关注原料来源、酿造工艺、风味特征及实际适用性...
- 农历二月属相是什么生肖(十二生肖对应月份 )1、二生肖代表月份:正月(寅)虎,二月(卯)兔,三月(辰)龙,四月(巳)蛇,五月(午)马,六月(未)羊,七月(申)猴,八月(酉)...
- HTC One MaxHTC One Max是台湾手机公司HTC所打造的大萤幕智慧手机,属于HTC One系列高阶机型,搭载Android 4.3作业系统,使用介面为HTC Sense 5.5,规格与HTC One (M7)...