React H5移动端实现原图对比特效

记录下我在项目中需要实现的一个js特效,有需要的小伙伴自己参考哦,切记不要CV,俗话说:“授人以鱼不如授人以渔”

import React, { useEffect } from 'react';
import './index.less';

export default function Header() {
  // 原图对比
  useEffect(()=>{
	// 第一步:获取相关dom元素
	const swiper = document.querySelector('.swiper');
	const beforeImg = document.querySelector('.before-img');
	const handle = document.querySelector('.handle');
	
	// 第二步:定义一个变量用于计算:触屏位置 - handle位置
	var marginX;
	
	// 第三步:开启触摸事件
	handle.addEventListener('touchstart',function(e){
		marginX = e.targetTouches[0].pageX - handle.offsetLeft;
		// 第四步:开启触摸移动事件
		swiper.addEventListener('touchmove',moveHandler)
	})
	
	// 第五步:触摸结束
	 handle.addEventListener('touchend', function (e) {
	 	// 第六步:取消触摸移动事件的绑定
        siwper.removeEventListener('touchmove',moveHandler)
    })
	
	function moveHandler(e){
		handle.style.left = e.targetTouches[0].pageX - marginX +'px';
		beforeImg.style.width = e.targetTouches[0].pageX - marginX +'px';
	}
  },[])
  
  return (
    <div className='before-after'>
      <div className="swiper">
      	<div className="before-img">
      		<img src="../assets/img/before-img" alt="" />
      	</div>
      	<img src="../assets/img/after-img" alt="" />
      	<span class="handle"></span>
      </div>
    </div>
  )
}
.before-after{
	display:flex;
	align-items:center;
	justify-content:center;
	overflow:hidden;
	.swiper{
		position:relative;
		height:100%
		img{
			display:block;
			height:100%;
			user-select:none; /* 设置img禁止选中,防止图片拖动 */
		}
		.before-img{
			img{
				position:absolute;
				top:0;
				left:0;
				bottom:0;
				width:50%;
				height:100%;
				overflow:hidden;
			}
		}
		.handle{
			display:block;
			width:3px;
			height:100%;
			background-color:rgb(0,0,0,0.3)
			position:absolute;
			left:50%;
			top:0;
			transform:translate(-50%);
			content:'\2b0c';
			&::after{
				width:40px;
				height:40px;
				background-color:rgb(0,0,0,0.5);
				content:'\2b0c';
				color:white;
				font-size: 25px;
    			text-align: center;
    			line-height: 40px;
    			border-radius: 50%;
    			box-shadow: 0px 2px 6px #000;
    			transition: all .3s ease;
			}
		}
	}
}

效果如下:

是小北吖💭 2022-11-11 15.04.29

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

00程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值