uniapp:分享一个自定义侧滑样例

news2024/12/28 5:25:24

  • 首先看html,分为两部分,主体内容部分和功能部分,功能部分在css中定位到主体部分的右边
<view class="section" ref="box_center" 
    @touchstart="drawStart" 
    @touchmove="drawMove($event)"
    @touchend="drawEnd($event)">
    <view class="content">
         <view class="setting">
		 	这里放的是内容
		 </view>
	</view>
	<view class="function">
		 <view class="title">这里是功能</view>
		 <view class="edit flexCenter">编辑信息</view>
         <view class="more flexCenter"><text>更多</text></view>
         <view @click="restore()">收起</view>
	</view>
</view>
  • js代码逻辑部分(注意:当渲染同一项多个时,获取元素this.$refs.box_center需要加索引值,调用方法时传参记得带上)
data() {
	return {
		clientX:0,
	}
},
methods: {
	// 开始触摸
	drawStart(e) {
		// 获取开始触摸时的位置
		this.clientX = e.changedTouches[0].clientX
	},
	// 触摸过程
	drawMove(e) {
		//获取触摸过程中的结束位置
		var endX = e.changedTouches[0].clientX;
		//用结束位置-开始位置
		let diff = endX - this.clientX
		//如果diff小于0表示用户是左滑的
		if (diff < 0) {
			let box_center = this.$refs.box_center
			//注意给个动画,小编在css上写过了,也可以在这里赋值
			box_center.$el.style.left = '-110px'
		}
	},
	// 结束触摸
	drawEnd(e) {
		var endX = e.changedTouches[0].clientX;
		let diff = endX - this.clientX;
		let box_center = this.$refs.box_center
		// 防止误触 -- 给一个误差区间,防止用户误触
		if (Math.abs(diff) > 20) {
			if (diff < 0) {
				box_center.$el.style.left = '-220rpx'
			} else {
				box_center.$el.style.left = '0'
			}
		}
	},
	// 点击恢复原来的位置
	restore() {
		let box_center = this.$refs.box_center
		box_center.$el.style.left = '0'
	},
}
  • 用到uniapp的3个手指触摸事件

        1.touchstart:手指触摸屏幕时候触发

        2.touchmove:指在屏幕上滑动的时候连续地触发,在这个事件发生期间,调用preventDefault()事件可以阻止滚动。

        3.touchend:手指从屏幕上离开的时候触发

  • 效果图

        -- 首次渲染

        -- 左滑时

        -- 右滑时

        -- 点击收起

  •  最终app的侧滑功能也就实现了
  • 完整代码如下:(小编是从自己项目下摘下来的代码,如果对大家有用,css样子需要自己修改一下了!!)
<template>
	<view>
		<view class="section" ref="box_center" 
			@touchstart="drawStart" 
			@touchmove="drawMove($event)"
			@touchend="drawEnd($event)">
			<view class="content">
				<view class="setting">
					这里放的是内容
				</view>
			</view>
			<view class="function">
				<view class="title">这里是功能</view>
				<view class="edit flexCenter">编辑信息</view>

				<view class="more flexCenter"><text>更多</text></view>
				<view @click="restore()">
					收起
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				clientX:0,
			}
		},
		methods: {
			// 开始触摸
			drawStart(e) {
				// 获取开始触摸时的位置
				this.clientX = e.changedTouches[0].clientX
			},
			// 触摸过程
			drawMove(e) {
				//获取触摸过程中的结束位置
				var endX = e.changedTouches[0].clientX;
				//用结束位置-开始位置
				let diff = endX - this.clientX;

				//如果diff小于0表示用户是左滑的
				if (diff < 0) {
					let box_center = this.$refs.box_center
					//注意给个动画,小编在css上写过了,也可以在这里赋值
					box_center.$el.style.left = '-110px'
				}
			},
			// 结束触摸
			drawEnd(e) {
				var endX = e.changedTouches[0].clientX;
				let diff = endX - this.clientX;
				let box_center = this.$refs.box_center
				// 防止误触 -- 给一个误差区间,防止用户误触
				if (Math.abs(diff) > 20) {
					if (diff < 0) {
						box_center.$el.style.left = '-220rpx'
					} else {
						box_center.$el.style.left = '0'
					}
				}
			},
			// 点击恢复原来的位置
			restore() {
				let box_center = this.$refs.box_center
				box_center.$el.style.left = '0'
			},
		}
	}
</script>

<style scoped lang="scss">
	.section {
		min-height: 408rpx;
		width: 100%;
		margin-bottom: 16rpx;
		position: relative;
		min-height: 408rpx;
		transition: all 0.5s linear;
		box-shadow: 0 4rpx 8rpx rgba(67, 89, 201, 0.1);
		left: 0;

		.content {
			width: 100%;
			min-height: 408rpx;
			background-color: #FFFFFF;
			border-radius: 8rpx;
			padding: 32rpx;

			.setting {
				width: 100%;
			}
		}

		.function {
			width: 204rpx;
			height: 100%;
			background-color: #fff;
			border-radius: 8rpx;
			position: absolute;
			right: -220rpx;
			top: 0;
			padding: 8rpx;
			display: flex;
			flex-direction: column;
			justify-content: space-between;
			box-shadow: 0 4rpx 8rpx rgba(67, 89, 201, 0.1);
			align-items: center;
			font-size: 24rpx;
			margin-bottom: 16rpx;
			text-align: center;

			.title {
				height: 80rpx;
				line-height: 80rpx;
				font-size: 28rpx;
				color: #3B5BD2;
				font-weight: bold;
				text-align: center;
				width: 100%;
				border-bottom: 2rpx solid #E4E4E4;
			}

			.edit,
			.more {
				width: 152rpx;
				height: 48rpx;
				border-radius: 25rpx;
				line-height: 48rpx;
				color: #fff;

				text {
					display: block;
					height: 100%;
					width: 96rpx;
					text-align: center;
					text-overflow: ellipsis;
					white-space: nowrap;
					overflow: hidden;
				}
			}

			.edit,
			.more {
				background-color: #0B33FF;
				margin: 10rpx auto 10rpx;
			}
		}
	}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

晨控智能UWB室内定位:工厂智能化的新引擎

晨控智能UWB室内定位&#xff1a;工厂智能化的新引擎 工厂是一个复杂而庞大的环境&#xff0c;通常包括多个车间、设备、人员以及大量的物料和产品。需要实时、准确的定位数据来支持各项运营活动。然而&#xff0c;传统的定位技术无法满足工厂内部的高精度定位需求。而UWB室内…

u-boot的烧写及使用,u-boot-2013.01的移植 6.30

1.将Linux的执行文件放到板子上运行 嵌入式系统 1.嵌入式系统 定制2.硬件&#xff1a;核心芯片底板软件&#xff1a;驱动应用 驱动系统应用&#xff08;并发&#xff0c;网络&#xff0c;文件。。。&#xff09;3.系统&#xff1a;linux 开源 模块化 支持芯片众多 功能…

针对字符串输入之间有空格的问题相关的问题

先说结论&#xff1a; bool flag true;while (cin >> s) {if (flag) {flag false;cout << s.size();} else {cout << , << s.size();}} 即用while&#xff08;cin>>s&#xff09;来输入&#xff0c;一段单词一段单词的来做&#xff08;遇到ci…

第十一章 原理篇:transformer模型入门

说在前面的话&#xff1a; 找工作面试不是特别顺利。进了目标公司的二面&#xff0c;但是一面面试官问的一些“新技术”问题答得不太好&#xff0c;尤其是transformer相关的。这一点确实是自己的问题&#xff0c;在工作后总是面向业务学习&#xff0c;对很多算法都是处于“听说…

AD从原理图到PCB超详细教程

AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…

库操作和表操作(数据库系列2)

目录 前言&#xff1a; 1.数据库的操作 1.1显示当前的数据库 1.2创建数据库 1.3使用数据库 1.4删除数据库 2.常用数据类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的操作 3.1查看表结构 3.2创建表 3.3查看表 3.4删除表 结束语&#xff1a; 前言&#xff1…

【硬件自动化测试--测试软件的设计及实现】如何设计并实现!

今天来聊聊关于硬件方向的自动化软件设计及实现,后面我会用实例来让我们更加深入的了解硬件自动化,首先开发工具选择的是python语言,为啥选择python语言呢,因为他的语法比较简洁,外置库非常多,反正就是对于做自动化方面很实用就对了。 1.硬件自动化测试大致分为三个阶段实…

拓展:IDEA如何使用不同版本的JDK?(改了还报错很可能因为没改全,以mac为例)

以下面的案例为例 Enhanced ‘switch’ blocks are not supported at language level ‘8’ 后面知道是因为Spring的版本和JDK的版本不对应&#xff0c;结果网上找到的解决方案都很简单。下载了一个新版本的JDK&#xff0c;然后IDEA里面Project Structure的Project标签里把SDK给…

ubuntu的aarch64版本上安装anaconda

ubuntu的aarch64版本上安装anaconda 问题背景&#xff1a;今天在基于docker安装的ubuntu18-04的版本上想要安装anaconda&#xff0c;但是出现了问题&#xff0c;发现ubuntu的版本18-04对应的是aarch64&#xff0c;因此记录安装方法。 首先下载安装包没问题但是&#xff0c;在具…

机器学习复习7

机器学习复习7 1 - 根据下图中绘制的决策树&#xff0c;如果一个动物的耳朵是软的&#xff0c;脸型是圆的&#xff0c;并且有胡须&#xff0c;那么这个模型会预测它是猫还是不是猫&#xff1f; A. 不是猫 B. 是猫 **答案&#xff1a;B ** 2 - 以一棵决策树学习来对垃圾邮件和非…

spring boot启动原理分析

springboot启动类中有两个关键的地方 1.SpringBootApplication注解 2.SpringApplication.run方法 SpringBootApplication注解分析 SpringBootApplication注解由三大注解构成&#xff0c; SpringBootConfiguration、EnableAutoConfiguration、ComponentScan。 SpringBootCon…

Java-八股文-基础本部分<一>

Java基础部分 基础篇<一> Java基础部分 基础篇<二> Java基础部分 基础篇<三> Java基础部分 异常篇 Java基础部分 集合篇 Java基础部分 线程篇 ❤️ &#x1f9e1; &#x1f49b; &#x1f49a; &#x1f499; &#x1f49c;&#x1f5a4; &#x1f90d;…

什么是网络货运平台?

一、什么是网络货运平台&#xff1f; 网络货运平台是依托互联网平台整合配置运输资源&#xff0c;以承运人身份与托运人签订运输服务合同、承担承运人责任&#xff0c;委托实际承运人完成运输服务的物流平台。它通过互联网形式实现运输过程真实、公平、公正、合法&#xff0c…

【LeetCode】239. 滑动窗口最大值

239. 滑动窗口最大值 思路 当我们遍历数组时&#xff0c;我们需要维护一个双端队列&#xff0c;用于存储滑动窗口中的元素的索引。 队列中的元素按照降序排列&#xff0c;即「队头元素是当前滑动窗口中的最大值」。 具体的步骤如下&#xff1a; 创建一个双端队列 window&#…

Spring Boot中的Elasticsearch自动配置:原理与使用

Spring Boot中的Elasticsearch自动配置&#xff1a;原理与使用 简介 在Spring Boot中&#xff0c;Elasticsearch是非常流行的搜索引擎。为了方便开发人员使用Elasticsearch&#xff0c;Spring Boot提供了Elasticsearch自动配置功能。本文将介绍Elasticsearch自动配置的原理与…

burpsuite踩坑(一)

今天在使用burpsuite的时候&#xff0c;能抓到https或者http的包。 但是repeater模块无法使用&#xff0c;而且放行包之后&#xff0c;会出现提示。 搞了半天&#xff0c;以为是证书的问题&#xff0c;或者是burp汉化版的原因&#xff0c;还把汉化版的burp给删除了。 发现都…

【Docker】基于jib插件,实现Docker部署springboot项目

文章目录 创建springboot项目jib插件介绍使用打tar包 Docker部署springboot项目 在工作中&#xff0c;作为一名后端开发人员&#xff0c;项目部署运维的事我们可能都要同时干&#xff0c;今天想跟大家聊聊关于springboot项目使用docker部署相关操作。后期还会跟大家分享docker-…

笔记-方向导数和梯度

笔记-方向导数和梯度 目录方向导数梯度方向导数和梯度的关系 目录 方向导数 方向导数和偏导数的区别就是&#xff1a;方向不同。仅此而已。 我们常说的偏导数无非就是对x轴求偏导&#xff0c;对y求偏导。而方向导数则是对x轴与y轴之间的某一新方向求导数。 还是用一下上次的…

大模型基础之注意力机制和Transformer

【注意力机制】 核心思想&#xff1a;在decoder的每一步&#xff0c;把encoder端所有的向量提供给decoder&#xff0c;这样decoder根据当前自身状态&#xff0c;来自动选择需要使用的向量和信息. 【注意力带来的可解释性】 decoder在每次生成时可以关注到encoder端所有位置的…

Llama大模型运行的消费级硬件要求【CPU|GPU|RAM|SSD】

大型语言模型 (LLM) 是强大的工具&#xff0c;可以为各种任务和领域生成自然语言文本。 最先进的LLM之一是 LLaMA&#xff08;大型语言模型 Meta AI&#xff09;&#xff0c;这是由 Facebook 的研究部门 Meta AI 开发的一个包含 650 亿个参数的模型 要在家运行 LLaMA 模型&…