一个有趣的图片过度动画效果

前言

昨天在网上冲浪的时候,看到了一个关于AI修正图片的网站(GoEnhance AI - Video to video, Image enhancer and upscaler),这个网站上面有一个图片过渡的效果,就是根据你的鼠标移动来改变图片的展示效果。

实现原理

我看到这个效果的一瞬间就感到很好玩,于是就想了想怎么实现它,发现还是很简单的。

首先

我们先创建一个大盒子(.container),在它里面创建两个子盒子(.box),再在这两个盒子里面分别添加一个img图片标签。(ps:当然你也可以直接将图片放到子盒子中,当它们的背景图片)

ini 复制代码
<div class="container" id="container">
      <div class="box">
        <img src="./images/at.jpg" alt="你自己图片地址">
      </div>
      <div class="box" id="box2">
        <img src="./images/gs.jpg" alt="你自己图片地址">
      </div>
      <div class="line" id="line"></div>
 </div>

然后

我们开始写css样式。

css 复制代码
 * {
        margin: 0;
        padding: 0;
      }
      .container {
        width: 500px;
        height: 500px;
        margin: 0 auto;
        position: relative;
      }
      .box {
        width: 100%;
        text-align: center;
        position: absolute;
        overflow: hidden;
      }
      img {
        height: 500px;
      }
      .box:nth-child(2) {
        width: 50%;
      }
      .line{
        content: '';
        position: absolute;
        height: 100%;
        border: 1px solid #000;
        left: 50%;
        transform: translate(50%);
      }

最后

我们开始写js执行脚本,思路是先获取.cantainer、.line和.box2的元素节点,然后再在 .cantainer盒子上面绑定一个鼠标移动事件,再然后获取鼠标在视图上的x轴的位置和.cantainer在视图上的x轴的位置,将它们相减就可以得到鼠标在.cantainer上的位置了,最后把它赋值给.line和.box2上面就好。js代码如下:

ini 复制代码
var con = document.getElementById('container')
    var line = document.getElementById('line')
    var box2 = document.getElementById('box2')
    con.addEventListener('mousemove', (event)=>{
        var mouseX = event.clientX

        var boxRect = con.getBoundingClientRect()
        var boxX = boxRect.left

        var offsetX = mouseX - boxX

        
        line.style.left = `${offsetX}px`
        box2.style.width = `${offsetX}px`
        console.log(offsetX)
    })
   console.log(con.style)

实现效果

相关推荐
万少6 小时前
用腻了 WorkBuddy 的默认界面?这个开源小工具给它换上了毛玻璃
前端·javascript·后端
To_OC8 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
触底反弹9 小时前
🔥 前端也能玩转 AI 流式输出!从二进制流到打字机效果,一篇讲透
javascript·人工智能·node.js
胡萝卜术9 小时前
深度重构:Agent Skills——从 Prompt 工程到能力工程
javascript·架构·github
To_OC11 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
rockey62711 小时前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
kyriewen12 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程
心中有国也有家13 小时前
AtomGit Flutter 鸿蒙客户端:Canvas 绘制进阶-路径、渐变与混合模式
android·javascript·flutter·华为·harmonyos
鹿目14 小时前
使用 Vant CLI 搭建 UI 组件库:从 H5 到小程序跨平台
前端·javascript
默_笙14 小时前
😭 我花了两小时找了一个数据结构 bug,才把"迷你 Cursor"跑起来,绝望(bushi)
前端·javascript