javascript - 与javascript协调缩放图像
问题描述
我正在尝试开发的是一种在线迷你游戏,但我被困在缩放部分。在我的例子中,会有一个带有散落鸡蛋的 html 图像,这将是图像的一部分。玩家必须点击彩蛋,在 javascript 端,我必须在图像上彩蛋的精确位置放置一个事件监听器,然后放大该位置。
我的问题有两个:首先,我必须找到一种方法将事件侦听器放在图像的一个点(所以我猜是坐标)上,如果调整窗口大小,该点将保持不变;然后我必须找到一种方法来放大 javascript 中的那个点。我找到的所有指南都仅解释了如何使用鼠标滚轮进行缩放,而不是通过单击该特定点来进行缩放。
有什么想法?
解决方案
这是一个关于如何捕捉点单击并放大所需点的工作概念证明:
const gameElement = document.getElementById("game");
const eggsUrl = "https://i.imgur.com/saXapYu.png";
const pointsUrl = "https://i.imgur.com/tFStOam.png";
const backgroundImageSize = "1";
let isZoomedIn = false;
let zoomCoordinates = {
x: 0,
y: 0
};
let zoomSize = "100% 100%";
const points = [{
x: 40,
y: 40
},
{
x: 200,
y: 200
},
{
x: 360,
y: 360
}
];
function onGameClicked(event) {
if (isZoomedIn) {
gameElement.style.backgroundSize = "100% 100%";
gameElement.style.backgroundPosition = "center";
isZoomedIn = false;
} else {
const clickedElement = getClickedElement(event.clientX, event.clientY);
if (clickedElement) {
zoomedX = 200 - (clickedElement.x * 2);
zoomedY = 200 - (clickedElement.y * 2);
gameElement.style.backgroundSize = "200% 200%";
gameElement.style.backgroundPosition = `${zoomedX}px ${zoomedY}px`;
isZoomedIn = true;
}
}
}
function getClickedElement(clickedX, clickedY) {
for (const point of points) {
if (clickedX > point.x - 25 &&
clickedX < point.x + 25 &&
clickedY > point.y - 25 &&
clickedY < point.y + 25) {
return point;
}
}
}
gameElement.addEventListener("click", onGameClicked);
document.getElementById("eggs").addEventListener("click", () => {
gameElement.style.backgroundImage = `url("${eggsUrl}")`;
});
document.getElementById("points").addEventListener("click", () => {
gameElement.style.backgroundImage = `url("${pointsUrl}")`
});
#game {
width: 400px;
height: 400px;
border: 1px solid black;
background-image: url("https://i.imgur.com/tFStOam.png");
cursor: pointer;
transition: 1s;
background-repeat: no-repeat;
}
<div id="game"></div>
<button id="eggs">Show eggs</button>
<button id="points">Show points</button>
在“整页”中打开代码段进行测试
编辑:我什至加了鸡蛋!
推荐阅读
- java - 如何在不重新加载框架的情况下在 jTable 组合框中添加项目
- python - 如何使用views.py在django表单中设置作者字段的默认值
- java - 差异处的空指针异常。
(解决方案.java:16) - android - 在 Kotlin Android 的 API 响应模型中调用辅助构造函数
- testing - IntelliJ:“在测试文件夹中启用覆盖”复选框背后的基本原理
- wso2 - WSO2 EI/ESB 中的顺序后端调用
- javascript - 如何将swal模式中的标题调整到左上角
- django - 表格中的可点击行
- xcode - XCode UI 测试因“元数据不完整”而失败
- android - 本机脚本如何访问 10.0.2.2 android