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
英文地址,請注明出處:http://en.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(自…