CSS 实现图片对比
CSS 实现图片对比
CSS 实现图片对比(二)
CSS 实现图片对比(二)
前言
要做的功能中有历史图片对比,查找后发现并没有可用的组件等。
通过查资料,实现的方式大体有两种:
1、使用 resize
2、通过设置遮盖的 width
在通过考量后,这里选择第二种方式实现。
实现
HTML 结构
这里包了多层,是想适应不同的大小图片的对比。
imgWidth:图像的宽,作为容器的宽。这个容器居中于外层的 box。
beforWidth:上面遮盖图片显示的宽度,根据当前拖动的值冬天变化。
<template> <div class="box"> <div :style="{width:imgWidth+'px'}" class="container"> <div :style="{width:beforWidth+'%'}" class="img img-before"> <img :src="imgList[0]" alt=""> </div> <div class="img img-after"> <img :src="imgList[1]" alt=""> </div> <input v-model="beforWidth" type="range" min="0" max="100" class="slider"> <div :style="{left:beforWidth+'%'}" class="btn" /> </div> </div> </template> <script> export default { data() { return { imgList: ['image1','image2'], imgWidth: 600, beforWidth: 50 } } } </script>
CSS
下面是具体的CSS
.box{ width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; .container { position: relative; height: 100%; } .img { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: flex; align-items: center; } .img-before { overflow: hidden; z-index: 1; } .slider { position: absolute; appearance: none; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: transparent; outline: none; margin: 0; transition: all 0.2s; z-index: 3; &::-webkit-slider-thumb { width: 4px; height: 800px; -webkit-appearance: none; appearance: none; background: #ffffff; border-radius: 4px; /*外观设置为圆角*/ box-shadow: 0 0.125em 0.125em #3b4547; /*添加底部阴影*/ cursor: pointer; z-index: 5; } } .btn { position: absolute; top: 50%; z-index: 2; &::before { content: ''; position: absolute; left: -15px; padding: 5px; display: inline-block; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(135deg); } &::after { content: ''; position: absolute; left: 3px; padding: 5px; display: inline-block; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(-45deg); } } }
实现效果:
效果1:
参考: