vue,uniapp 实现卷帘对比效果

需求:两张图重叠放在一起,拖动分割线实现卷帘对比效果,如图

在这里插入图片描述
在这里插入图片描述

一、vue2代码

<template><div class="main"><div class="img-comparison" @mousedown="startSlide"><img class="before" src="../assets/images/white/1.png" alt="Before" /><imgclass="after"src="../assets/images/white/2.png"alt="After":style="{clipPath:'polygon(0 0, ' +sliderPosition +'% 0, ' +sliderPosition +'% 100%, 0 100%)',}"/><div class="slider" :style="{ left: sliderPosition + '%' }"></div></div></div>
</template><script>
export default {data() {return {sliderPosition: 0, // 初始位置设为 0 (左侧)isSliding: false,};},methods: {startSlide(e) {this.isSliding = true;document.addEventListener("mousemove", this.moveSlider);document.addEventListener("mouseup", this.endSlide);this.moveSlider(e);// 禁止文本和图片选中document.body.style.userSelect = "none";},moveSlider(e) {if (!this.isSliding) return;const comparisonRect = e.target.closest(".img-comparison").getBoundingClientRect();const newPosition = e.clientX - comparisonRect.left;this.sliderPosition =(Math.max(0, Math.min(comparisonRect.width, newPosition)) /comparisonRect.width) *100;},endSlide() {this.isSliding = false;document.removeEventListener("mousemove", this.moveSlider);document.removeEventListener("mouseup", this.endSlide);// 恢复文本和图片的可选中行为document.body.style.userSelect = "";},},
};
</script><style lang="scss" scoped>
.main {display: flex;align-items: center;justify-content: center;height: 100vh;background-color: black;.img-comparison {position: relative;width: 100%;max-width: 600px;user-select: none; // 禁用选择img {width: 100%;height: 600px;pointer-events: none; // 禁止图片的鼠标事件,以避免选中}.after {position: absolute;top: 0;left: 0;transition: clip-path 0.3s ease; // 加快动画速度}.slider {position: absolute;top: 0;bottom: 0;width: 2px;background-color: rgba(255, 255, 255, 0.5);cursor: ew-resize;transition: left 0.3s ease; // 加快动画速度}}.img-comparison:hover {cursor: pointer;}
}
</style>    

二、uniapp代码

<template><view class="main"><view class="img-comparison" @touchstart="startSlide" @touchmove="moveSlider" @touchend="endSlide"><image class="before" :src="require('../../static/888.png')" mode="aspectFill" alt="Before"></image><imageclass="after":src="require('../../static/999.png')"mode="aspectFill":style="{clipPath:'polygon(0 0, ' +sliderPosition +'% 0, ' +sliderPosition +'% 100%, 0 100%)',}"alt="After"></image><view class="slider" :style="{ left: sliderPosition + '%' }"></view></view></view>
</template><script>
export default {data() {return {sliderPosition: 0, // 初始位置设为 0 (左侧)isSliding: false,};},methods: {startSlide(e) {this.isSliding = true;this.moveSlider(e);},moveSlider(e) {if (!this.isSliding) return;const query = uni.createSelectorQuery().in(this);query.select('.img-comparison').boundingClientRect((res) => {const newPosition = e.changedTouches[0].clientX - res.left;this.sliderPosition =(Math.max(0, Math.min(res.width, newPosition)) / res.width) * 100;}).exec();},endSlide() {this.isSliding = false;},},
};
</script><style lang="scss" scoped>
.main {display: flex;align-items: center;justify-content: center;height: 100vh;background-color: black;.img-comparison {position: relative;width: 100%;max-width: 600px;user-select: none; // 禁用选择image {width: 100%;height: 600px;pointer-events: none; // 禁止图片的鼠标事件,以避免选中}.after {position: absolute;top: 0;left: 0;transition: clip-path 0.3s ease; // 加快动画速度}.slider {position: absolute;top: 0;bottom: 0;width: 2px;background-color: rgba(255, 255, 255, 0.5);cursor: ew-resize;transition: left 0.3s ease; // 加快动画速度}}.img-comparison:hover {cursor: pointer;}
}
</style>    

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

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

相关文章

【笔记】空气弹簧概述、刚度调节原理

参考链接&#xff1a;汽车底盘空气悬架关键零部件之空气弹簧 1.概述 汽车空气弹簧&#xff08;Air Spring&#xff09;是一种以“压缩空气”作为弹性介质的悬架元件&#xff0c;用来取代传统钢制螺旋弹簧或钢板弹簧。它在乘用车、客车、重卡及轨道交通上越来越普及&#xff0…

UDP Socket 进阶:从 Echo 到字典服务器,学会 “解耦” 网络与业务

开篇&#xff1a;从 “回显” 到 “字典”&#xff0c;核心变在哪&#xff1f;上一篇我们实现了 Echo 服务器 —— 网络层和业务层是 “绑死” 的&#xff1a;网络层收到数据后&#xff0c;直接把原数据发回去。但实际开发中&#xff0c;业务逻辑会复杂得多&#xff08;比如查字…

数据结构之复杂度

数据结构的理解 数据本身是杂乱无章的&#xff0c;需要结构进行增删查改等操作更好的管理数据&#xff1b; 比如&#xff1a;在程序中需要将大量的代码&#xff08;数据&#xff09;通过结构进行管理&#xff1b; 再比如&#xff1a;定义1000个整型变量的数组&#xff0c;我们…

运维安全06 - 服务安全

云计算服务安全 在当今数字化时代&#xff0c;各种服务&#xff08;如网络应用、云计算平台、数据库系统等&#xff09;已成为我们日常生活和工作中不可或缺的一部分。 然而&#xff0c;随着服务的广泛应用&#xff0c;其安全性问题也日益凸显。 一、服务安全 服务安全是一…

01数据结构-初探动态规划

01数据结构-初探动态规划前言1.基本思想2.重叠子问题3.斐波那契数列4.备忘录&#xff08;记忆化搜索表&#xff09;4.1备忘录&#xff08;记忆化搜索表&#xff09;代码实现5.DP table5.1DP table代码实现6.练习前言 在学习动态规划时切忌望文生义&#xff0c;因为其名字与其思…

[智能算法]可微的神经网络搜索算法-FBNet

一、概述 相较于基于强化学习的NAS&#xff0c;可微NAS能直接使用梯度下降更新模型结构超参数&#xff0c;其中较为有名的算法就是DARTS&#xff0c;其具体做法如下。 首先&#xff0c;用户需要定义一些候选模块&#xff0c;这些模块内部结构可以互不相同&#xff08;如设置不同…

Elasticsearch安装启动常见问题全解析

文章目录&#x1f4da; Elasticsearch 安装与启动问题总结一、核心问题概览二、详细问题分析与解决方案1. &#x1f510; **权限问题&#xff1a;AccessDeniedException**❌ 错误日志&#xff1a;&#x1f4cc; 原因&#xff1a;✅ 解决方案&#xff1a;2. ⚙️ **配置冲突&…

Uniapp中使用renderjs实现OpenLayers+天地图的展示与操作

Uniapp中自带的地图组件对支持的地图服务略有局限&#xff0c;同时&#xff0c;该组件在样式布局上层级过高且无法控制&#xff0c;无法满足部分高度自定义化的需求。故引入renderjs视图层工具搭配OpenLayers框架对地图功能进行实现&#xff0c;但由于renderjs的限制&#xff0…

从C++开始的编程生活(8)——内部类、匿名对象、对象拷贝时的编译器优化和内存管理

前言 本系列文章承接C语言的学习&#xff0c;需要有C语言的基础才能学会哦~ 第8篇主要讲的是有关于C的内部类、匿名对象、对象拷贝时的编译器优化和内存管理。 C才起步&#xff0c;都很简单&#xff01;&#xff01; 目录 前言 内部类 性质 匿名对象 性质 ※对象拷贝时的…

MT5追大速率回测BUG

将MT5策略测试器中的回测速率调到最大(最快速度),**确实非常容易导致出现不符合策略逻辑的秒级成交(闪电交易)**。这并非MT5的“bug”,而是由**回测引擎的工作方式**与**策略代码的编写方法**在高速运行下不匹配所导致的。 --- ### 为什么最大速率会导致问题? MT5回测…

[数据结构——lesson10.堆及堆的调整算法]

引言 上节我们学习完二叉树后[数据结构——lesson9.二叉树]&#xff0c;这节我们将学习数据结构——堆 学习目标 1.堆的概念及结构 堆是一种特殊的完全二叉树结构&#xff0c;在计算机科学和数据结构中广泛应用&#xff0c;特别是在堆排序算法和优先队列的实现中&#xff0c;…

九识智能与北控北斗合作研发的L4级燃气超微量高精准泄漏检测无人车闪耀服贸会,守护城市安全

2025年9月10日至14日&#xff0c;2025年中国国际服务贸易交易会将于北京首钢园举办。在这场国际盛会上&#xff0c;九识智能与北京北控北斗科技投资有限公司&#xff08;以下简称“北控北斗”&#xff09;合作研发的L4级燃气超微量高精准泄漏检测无人车及相关系统解决方案&…

【C语言入门】手把手教你实现顺序栈

栈是计算机科学中最基础且重要的数据结构之一&#xff0c;它遵循"后进先出"&#xff08;LIFO&#xff09;的原则。想象一下一叠盘子&#xff0c;你只能从最上面取放&#xff0c;这就是栈的直观体现。本文将用C语言带你一步步实现一个顺序栈&#xff0c;即使你是编程小…

北斗导航 | ARAIM(高级接收机自主完好性监测)算法在民航LPV-200进近中的具体实现流程

要详细说明ARAIM(高级接收机自主完好性监测)算法在民航LPV-200进近中的具体实现流程,需结合ARAIM的核心逻辑(多星座融合、多假设解分离、风险优化分配)与LPV-200的严格要求(垂直保护级VPL≤35米、垂直告警限VAL=35米、有效监测门限EMT≤15米等),以下是 step-by-step 的…

AIPex:AI + 自然语言驱动的浏览器自动化扩展

AIPex:AI + 自然语言驱动的浏览器自动化扩展 引言 一、快速上手 1.1 安装AIPex扩展 1.2 首次配置 1.3 界面介绍 第二章:30+工具详解 2.1 标签页管理工具集 🗂️ **get_all_tabs - 全局标签页概览** 🎯 **switch_to_tab - 智能标签页切换** 📋 **标签页批量操作** 📋 …

机器学习模型可信度与交叉验证:通俗讲解

先从一个故事说起&#xff1a;农场里的火鸡科学家&#xff0c;观察了一年发现“每天上午11点必有食物”&#xff0c;结果感恩节当天&#xff0c;它没等到食物&#xff0c;反而成了人类的食物。这个故事告诉我们&#xff1a;只靠过去的经验下结论&#xff0c;很可能出错——机器…

HTML5和CSS3新增的一些属性

1、HTML5新增特性这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本浏览器才支持1&#xff09;新增语义化标签2&#xff09;新增多媒体标签音频&#xff1a;<audio>视频&#xff1a;<video>&#xff08;1&#xff09;视频<video>---尽量使用mp4格式<…

Redis的RedLock

RedLock算法深度解析RedLock是Redis作者针对分布式环境设计的多节点锁算法&#xff0c;核心目标是解决单点Redis在分布式锁场景中的可靠性缺陷。传统方案的局限性单节点Redis锁的问题单点故障&#xff1a;单个Redis实例宕机导致所有锁服务不可用可靠性不足&#xff1a;无法保证…

SpringMVC @RequestMapping的使用演示和细节 详解

目录 一、RequestMapping是什么&#xff1f; 二、RequestMapping 的使用演示 1.RequestMapping在方法上的使用&#xff1a; 2.RequestMapping同时在类和方法上使用&#xff1a; 3.RequestMapping指定请求参数&#xff1a; 4.RequestMapping使用Ant风格URL&#xff1a; 5.Requ…

flutter项目 -- 换logo、名称 、签名、打包

1、换logo, 透明底&#xff0c;下面5个尺寸&#xff0c;需要UI设计2、换名没配置型的改名方式如下 打开app/src/main/AndroidManifest.xml3、签名 运行 flutter doctor -vD:\project\Apk\keystore 自己建立的keystore文件夹&#xff0c; 注意命令后是 megoai-release-key(自…