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:

 

 

参考:

CSS秘密花园:交互式图像对比

使用CSS和JS创建图像“前后”对比效果

自定义inputp[type="range"]样式

posted @ 2022-02-23 17:40  漠里  阅读(372)  评论(0编辑  收藏  举报