【Uniapp】图片修复对比组件

效果图

在这里插入图片描述
不废话,直接上源码!

组件直接用

<template><viewclass="img-comparison-container":style="'width:' + width + 'rpx;height:' + height + 'rpx'"><view class="before-image" :style="'width:' + x + 'rpx'"><view :style="'width:' + width + 'rpx;height:' + height + 'rpx'"><image:src="beforeImageUrl"class="images"mode="aspectFill"data-type="before"@tap="previewImage"/></view><view v-if="beforeText" class="before-text">{{ beforeText }}</view></view><view class="after-image"><view :style="'width:' + width + 'rpx;height:' + height + 'rpx'"><image:src="afterImageUrl"class="images"mode="aspectFill"data-type="after"@tap="previewImage"/></view><view v-if="afterText" class="after-text">{{ afterText }}</view></view><viewclass="slider-bar":style="'left:' + x + 'rpx'"@touchmove="handleTouchMove"@touchstart="handleTouchStart"@touchend="handleTouchEnd"><view class="slider-button"></view></view></view>
</template><script>
export default {props: {width: {type: String,default: "750",},height: {type: String,default: "850",},beforeImageUrl: {type: String,},afterImageUrl: {type: String,},beforeText: {type: String,default: "制作前",},afterText: {type: String,default: "制作后",},},data() {return {isPressDown: false, //鼠标是否正按住x: this.width / 2, //设置位置};},methods: {handleTouchStart(event) {this.isPressDown = true;this.startX = event.touches[0].clientX; // 记录触摸起始点this.sliderStartX = this.x; // 记录slider起始位置},handleTouchMove(event) {if (!this.isPressDown) {return;}const moveX = event.touches[0].clientX - this.startX; // 计算移动距离let newX = this.sliderStartX + moveX * 2; // 计算slider新位置// 限制 newX 在 0 和 this.width 之间newX = Math.max(0, Math.min(newX, this.width));this.x = newX; // 更新位置},handleTouchEnd() {this.isPressDown = false;},previewImage(e) {const staticPrefix = "static";const imageType = e.currentTarget.dataset.type;const imageUrlMap = {before: this.beforeImageUrl,after: this.afterImageUrl,};// 如果当前图片URL中包含静态前缀,则直接返回if (imageUrlMap[imageType].includes(staticPrefix)) {return;}// 获取当前图片的URL,并使用uni.previewImage方法展示图片const currentImageUrl = imageUrlMap[imageType];uni.previewImage({urls: [imageUrlMap.before, imageUrlMap.after],current: currentImageUrl,});}},
};
</script><style lang="scss" scoped>
.img-comparison-container {position: relative;display: inline-block;overflow: hidden;border-radius: 20rpx;.before-image {position: absolute;top: 0;left: 0;z-index: 1;width: 50%;overflow: hidden;.before-text {position: absolute;left: 22rpx;top: 22rpx;color: #ffffff;background: rgba(34, 34, 34, 0.5);border-radius: 20rpx;padding: 5rpx 15rpx 5rpx 15rpx;font-size: 24rpx;white-space: nowrap;}}.after-image {position: absolute;top: 0;left: 0;z-index: 0;.after-text {position: absolute;right: 22rpx;top: 22rpx;color: #ffffff;background: rgba(34, 34, 34, 0.5);border-radius: 20rpx;padding: 5rpx 15rpx 5rpx 15rpx;font-size: 24rpx;white-space: nowrap;}}.images {width: 100%;height: 100%;}.slider-bar {cursor: move;position: absolute;width: 4rpx;left: 50%;top: 0rpx;background: #ffffff;height: 100%;display: block;z-index: 2;box-shadow: 0 0 20rpx 1px rgba(0, 0, 0, 0.4);.slider-button {position: absolute;width: 60rpx;height: 60rpx;border-radius: 50%;border: 4rpx solid #ffffff;background-color: transparent;left: calc(50% - 30rpx);top: calc(50% - 30rpx);}&::before {content: "";padding: 6rpx;border: solid #ffffff;border-width: 0 4rpx 4rpx 0;position: absolute;top: calc(50% - 8rpx);left: calc(50% - 16rpx);transform: rotate(135deg);z-index: 1;}&::after {content: "";padding: 6rpx;border: solid #ffffff;border-width: 0 4rpx 4rpx 0;position: absolute;top: calc(50% - 8rpx);left: 50%;transform: rotate(-45deg);}}
}
</style>

使用方法

引入组件

import compareImage from "../components/index.vue";
<compare-image:beforeImageUrl="image.beforeImg":afterImageUrl="image.afterImg"width="624"height="624"beforeText="修复前"afterText="修复后"
/>

在这里插入图片描述
感谢你的阅读,如对你有帮助请收藏+关注!
只分享干货实战精品从不啰嗦!!!
如某处不对请留言评论,欢迎指正~
博主可收徒、常玩QQ飞车,可一起来玩玩鸭~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础——继承(下)

一、继承与静态成员 基类定义了static 静态成员&#xff0c;则整个继承体系里面只有一个这样的成员。无论派生出多少个子 类&#xff0c;都只有一个 static 成员实例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

54.指针

目录 一.什么是指针&#xff1f; 二&#xff0e;定义一个指针变量 三&#xff0e;指针变量类型 四&#xff0e;取地址运算符& 五.取值运算符* 六.视频教程 一.什么是指针&#xff1f; 口语中的指针一般指指针变量&#xff0c;指针变量存放的是一个地址。普通变量存放…

TCP(1)

传输层的两大协议是TCP 和 UDP &#xff0c;他们在传输数据的时候起到了不可替代的作用。那么什么是TCP呢&#xff1f; 首先TCP是一个网络传输协议&#xff0c;这个协议保证了可靠的数据传输。TCP是面向字节流的&#xff0c;全双工的&#xff08;也就是通信双方互相发消息&…

shell脚本之sort,uniq,tr,cut,sphit,paste,ecal与正则表达式

sort命令 uniq命令 tr命令 cut命令 sphit命令 paste命令 ecal命令 正则表达式 sort命令 sort命令---以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序…

Redis 源码安装和入门介绍

Linux下的redis源码安装 redis介绍 Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构&#xff0c;如 字符串&#xff08;strings&#xff09;&#xff0c;…

Leetcode - 周赛397

目录 一&#xff0c;3146. 两个字符串的排列差 二&#xff0c;3147. 从魔法师身上吸取的最大能量 三&#xff0c;3148. 矩阵中的最大得分 四&#xff0c;3149. 找出分数最低的排列 一&#xff0c;3146. 两个字符串的排列差 本题就是求同一个字符在两个字符串中的下标之差的…

Nacos+GateWay 搭建微服务架构

文章目录 1.当前项目架构分析1.请求多个模块的方式1.请求renren-fast模块开发环境生产环境 2.请求sunliving-commodity模块1.使用环境变量资源路径的方式2.开发环境 dev.env.js3.生产环境 prod.env.js 3.文件上传请求 sunliving-service模块1.请求后端接口&#xff08;开发环境…

基于网络爬虫技术的网络新闻分析(二)

目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势&#xff0c;其市场价值不仅体现在竞赛本身&#xff0c;还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目&#xff0c;包括竞速赛、技巧赛、航拍赛等。每个项目…

ADS使用记录之使用RFPro进行版图联合仿真-加入集总元器件

ADS使用记录之使用RFPro进行版图联合仿真-加入集总元器件 ADS使用记录之使用RFPro进行版图联合仿真中已经简单介绍了使用RFPro对版图就行仿真的方法。但是&#xff0c;如果版图中含有一些非微带的结构&#xff0c;比如说电感、电容、晶体管呢&#xff0c;在此举例解释一下。 …

Java--初识类和对象

前言 本篇讲解Java类和对象的入门版本。 学习目的&#xff1a; 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题&#xff0c;作者决定分多次发布。 面向对象的引入 J…

英飞凌SiC模块为小米电动车提供动力

至2027年之际&#xff0c;SiC功率模块与裸片产品将荣耀登场&#xff0c;助力小米电动汽车新品SU7璀璨问世。英飞凌&#xff0c;这家业界翘楚&#xff0c;将倾其所能&#xff0c;为小米SU7 Max提供两颗HybridPACK Drive G2 CoolSiC 1200 V模块&#xff0c;如同给电动汽车的心脏注…