前后图片转化

140 阅读1分钟

两张图像进行比较,则“前后”图像滑块是一个有效而又简单的 UI 元素

使用前后背景图和表单元素“input[type=range]”进行切换 使滑块具有 100%的容器宽度和高度,并将其放置在图像容器的顶部。当用户拖动滑块时,我们同时更新前景的宽度,创建一种用户拖动图像的错觉。

  • 前后两张背景图(尺寸大小相同)
  • 添加滑块,设置滑块大小和父容器一样大,背景色和透明度
  • 清除滑块默认样式(appearence:none)
  • 使用div设置样式居中,使用border进行设置边框,再旋转成><,再居中
  • input添加监听事件,获取value设置成滑块和圆圈的left值

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="./html2canvas.js"></script> -->
    <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>
</head>
<style>
    .container {
    position: relative;
    width: 500px;
    height: 300px;
    background: #ccc;
    margin: 0 auto;
     border: 2px solid white;
}

.back,.front {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    background-size: 500px 100%;
}

.back {
    width: 500px;
    background-image: url(./kaola.jpg);
}

.front {
    width: 50%;
    background-image: url(./qie.jpg);

}
input{
/*display: flex;
justify-content: center;
align-items: center;*/
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:rgba(242,242,241,.2);
/*appearance: none;在chrome浏览器不生效*/
-webkit-appearance: none;
transition: all 0.3s;
outline: none;
margin:0;
}

.slider:hover {
  background: rgba(242,242,241,.1); 
}
/*去除range默认样式 自定义*/
.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  /*清除默认样式*/
	appearance: none;
  width: 6px;
  height: 600px;
  background: white;
}



.slider-button {
  pointer-events: none;
  position: absolute;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background-color: white;
  left: calc(50% - 15px);
  top: calc(50% - 15px);
  /*left:235px;
  top:135px;*/
	display: flex;
	justify-content: center;
	align-items: center;
/*父容器设置成弹性盒子,项目元素自动居中对齐*/
}
.slider-button::after {
  content: '';
  padding: 2px;
  display: inline-block;
  border: solid #5D5D5D;
  border-width: 0 2px 2px 0;
  /*画出直角折线,再旋转变成大于符号*/
  transform: rotate(-45deg);
}
.slider-button::before {
  content: '';
  padding: 2px;
  display: inline-block;
  border: solid #5D5D5D;
  border-width: 0 2px 2px 0;
  transform: rotate(135deg);
}
</style>

<body>
    <div class="container" id="container">
        <div class="back"></div>
        <div class="front"></div>
        <input type="range" min=0 max=100 value=50 class="slider">
        <div class="slider-button"></div>
    </div>
    <script>
    let input = document.querySelector("input");
    let front = document.querySelector(".front");
    let button = document.querySelector(".slider-button");

    input.addEventListener("input", (e) => {
        // console.log(e.target.value);
        // console.log(front);
        // console.log(button.style.left);
        front.style.width = e.target.value + '%';
        button.style.left = `calc(${e.target.value}% - 15px)`;

    })
    //html截图
    html2canvas(document.getElementById("container"), {
        onrendered: function(canvas) {
            document.body.appendChild(canvas);
        }
    })
    </script>
</body>

</html>

来源 | https://blog.zhangbing.site/2021/01/04/how-to-create-a-before-after-image-slider-with-css-and-js/