JSFiddle - React, Tailwind, and code Playground

by HDL52

HTML

<div class="container"></div>

CSS

body {
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.container {
  width: 500px;
  height: 600px;
  background-image: url("https://raw.githubusercontent.com/Hongda-OSU/PicGo-2.3.1/master/img克鲁赛德战记-A.jpg");
  background-repeat: no-repeat;
  background-position: 50% 30%;
  border: 4px solid #000;
}

JavaScript

// https://css-tricks.com/moving-backgrounds/

var container = document.querySelector(".container")

container.addEventListener("mousemove", function (e) {
  var rect = container.getBoundingClientRect()

  // 获取鼠标在容器内的相对位置
  var x = e.clientX - rect.left
  var y = e.clientY - rect.top

  // 计算相对移动量
  var moveX = (x / rect.width - 0.5) * 2 // -1 到 1 之间的值
  var moveY = (y / rect.height - 0.5) * 2 // -1 到 1 之间的值

  // 根据比例调整背景位置,初始位置为 50% 30%
  var backgroundX = 50 + moveX * 20 // 调整 20 可以控制水平移动的敏感度
  var backgroundY = 30 + moveY * 15 // 调整 15 可以控制垂直移动的敏感度

  container.style.backgroundPosition = backgroundX + "% " + backgroundY + "%"
})

container.addEventListener("mouseleave", function () {
  container.style.backgroundPosition = "50% 30%" // 恢复到初始位置
})