- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 - 这是一个 fiddle :http://jsfiddle.net/cLahpqoj/1/这是我正在尝试做的一个例子:https://www.seventh.tv/
也许我在设置门位置方面的数学不好,把事情搞砸了。注意到鼠标位置和门的位置正在改变值的位置。记录:
{doorX: -1066, x: 396, doorY: -1367, y: 164}
{doorX: 396, x: -1065, doorY: 164, y: -1367}
来自:
let mouseX = e.offsetX;
let mouseY = e.offsetY;
let doorX = currentDoorRect.x;
let doorY = currentDoorRect.y;
let x = doorX;
let y = doorY;
x = -( x + (mouseX) );
y = -( y + (mouseY) );
let transform = 'translate(' + x + 'px,' + y + 'px)';
currentDoor.style.transform = transform;
console.log( {
doorX,
x,
doorY,
y
});
我正在尝试根据当前 div 位置和鼠标位置使用 transform:translate(x,y)
css 属性移动一个 div。
我正在记录传递给转换更改的 x 和 y 值,并注意每个值的更改,其中有一个在进行,其中包含类似 x: -1, y:0
的内容,然后立即回到值应该是什么(即 x:-563, y:424
)
我正在使用 Vue.js,函数是:
<template>
<div ref="test-container" id="test-container" class="h-full relative"
@mousedown.prevent="disableMiddleClickScroll"
@mousemove="moveDoors"
@wheel="disableWheelScroll">
<div
:ref="`door-${index}`"
v-for="index in numDoors" :key="index"
class="door bg-gray-300 p-8 text-center rounded flex-none">
Door
</div>
</div>
</template>
...
moveDoors(e) {
let mouseX = e.offsetX;
let mouseY = e.offsetY;
let currentDoor = this.$refs[`door-1`];
let currentDoorRect = currentDoor.getBoundingClientRect();
let doorX = currentDoorRect.x;
let doorY = currentDoorRect.y;
let x = -( doorX + (mouseX) );
let y = -( doorY + (mouseY) );
console.log( {
x,
y
});
let transform = 'translate(' + x + 'px,' + y + 'px)';
currentDoor.style.transform = transform;
},
事件是这样调用的:
控制台日志示例:
{x: 1, y: -0}
{x: -547, y: -426}
{x: 1, y: -0}
{x: -545, y: -426}
{x: -0, y: 1}
{x: -544, y: -425}
{x: -0, y: 1}
{x: -546, y: -424}
{x: -1, y: -0}
容器 CSS 是:
#test-container {
position: fixed;
left: 0%;
top: 0%;
right: 0%;
bottom: 0%;
}
如果没有足够的信息进行调试,请告诉我。我认为这就是所有相关的内容。
最佳答案
如果你想要的是这个网站正在做的,那么是的,你的数学不是你需要的,你的策略也有点偏差。
他们所做的是从视口(viewport)位置到内容位置的简单映射。您不需要单独移动每个元素,只需移动主容器即可。
基本上,如果您将光标移动到视口(viewport)的中心,内容将移动,使其中心位于视口(viewport)的中心。如果将其移至屏幕的左上角,则内容将移动,以便您看到内容的左上角。
要做到这一点,有多种策略。一种是将鼠标位置映射到 [0, 1] 范围,然后将该比率乘以内容的大小。然后,您只需将视口(viewport)大小调整一半,即可使整体正确居中。
const content = document.querySelector(".content");
document.onmousemove = (evt) => {
// the mouse position (in the viewport)
const viewport_x = evt.clientX;
const viewport_y = evt.clientY;
// the viewport size
const viewport_width = window.innerWidth;
const viewport_height = window.innerHeight;
// the mouse position, still relative to the viewport
// but in a range [0, 1]
const ratio_x = viewport_x / viewport_width;
const ratio_y = viewport_y / viewport_height;
// our content's size
const content_rect = content.getBoundingClientRect();
const content_width = content_rect.width;
const content_height = content_rect.height;
// transform the mouse position to the content's position
const content_x = content_width * ratio_x;
const content_y = content_height * ratio_y;
// remove it from half the size of the viewport
// so that aiming at the center of the viewport
// shows the center of our content
const translate_x = viewport_width / 2 - content_x;
const translate_y = viewport_height / 2 - content_y;
content.style.setProperty("--translate-x", translate_x + "px");
content.style.setProperty("--translate-y", translate_y + "px");
};
.content {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
transition: transform .5s ease-out;
width: 150vw;
height: 250vh;
transform: translate(var(--translate-x), var(--translate-y));
--translate-x: -25vw; /* (150vw - 100vw) / 2 */
--translate-y: -75vh; /* (250vh - 100vw) / 2 */
}
.frame {
border: 1px solid;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
counter-increment: frame;
}
.frame::after {
content: counter(frame);
}
body, :root {
overflow: auto;
border: 0px;
}
<div class="content">
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
<div class="frame"></div>
</div>
关于javascript - Mousemove 事件 - 基于鼠标位置的 div 位置正在反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68854094/
如果我有一个密集的 mousemove 处理程序 window.moveEventCounter = 0; window.addEventHandler("mousemove", function(e
我创建了一个 jquery 小部件,它允许我将其附加到 Canvas 并记录用户创建的绘图。 我在使用 Firefox 时遇到问题,jQuery 触发的事件不起作用;但 native JavaScri
$("#father").mousemove(function(){ alert("out"); }) 如何只在父级上绑定(bind) mousemove 事件,而不继承子
我遇到了一些奇怪的事情,但我不确定它是否是故意的或者是什么原因造成的。 我正在试验一些 JavaScript,当用户在屏幕上移动鼠标时循环一组图像。我正在使用 jQuery mousemove为了这。
我想是新手问题。 以下代码是我在文档就绪时调用的函数的一部分。它旨在在鼠标移动时永久返回当前鼠标位置的值。 正在发生的奇怪事情:在文档就绪时移动鼠标不会将任何内容记录到控制台。我知道 mouse_mo
我创建了一个 WPF 应用程序,其中关闭了标题栏和镶边。我在整个应用程序周围有一个边框,认为它在某些方面会像 chrome 一样。我尝试做的第一件事是让 mousemove 事件在单击鼠标时捕获鼠标的
想知道是否有适用于移动设备的 mousemove 的等效项,例如 touchmove 或 touchdrag 等。 我在容器中有一个图像,可以使用鼠标移动在悬停时平移该图像。有没有办法也可以针对移动设
如何在 JQuery 中创建鼠标按下并移动时触发的事件?并且每次 mousedown + mousemove 只触发一次? 最佳答案 更新: 因此,看起来如果您的鼠标不再位于绑定(bind) onmo
我已经实现了一个自定义 NSView(标记为 )并且能够获取 mouseUp:、mouseDown: 和 mouseMoved: 事件。对此,我已 AcceptFirstResponder 返回 YE
我通过以下方式使用事件监听器/处理程序: var _builder_canvas = document.getElementById("Builder"); mouseMove = f
我有一个子类NSView这是子类 NSDocument 的 .xib 文件的一部分,它通过 NSDocumentController 的默认行为变得活跃。的openDocument:方法。在此子类中
正如标题所说,我注意到在我的 Canvas 上,当按下/释放鼠标按钮时,即使我实际上没有移动鼠标,也会触发 mousemove 。问题是,在释放按钮的情况下,它会在 mouseup 之后被触发! 这是
u如何记录鼠标坐标的值? div = document.querySelector('.div'); div.addEventListener('mousemove', function yo(u)
Private Sub framePDF_MouseMove(ByVal... ) framePDF.BackColor = &H80000012& 所以,框架的颜色正在改变。 当光标远离框架时,我
我正在尝试制作一个特定的 仅当我的鼠标位于 范围内时,元素才保持可见元素并在 内移动元素。如果鼠标在 之外元素或在 内静止元素,那么它应该隐藏 元素。 我正在使用 mousemove事件监听器
我试图获取一个 mousemove 函数来显示当鼠标移动到特定 div 内时我创建的自定义光标元素。自定义光标是我希望它出现在的 div 中的绝对定位 div。我看到的奇怪的事情是我可以从开发人员工具
尝试用头顶摄像头制作一个简单的角色扮演游戏。当我去实现一个 MouseMotionListener 时(这不是我第一次使用 MouseMotionListener),似乎 mousedMoved Mo
我一直在尝试使用这段代码,就像当您将鼠标悬停在开始按钮上时,它应该将其颜色更改为灰色,但每当我将鼠标悬停在它上面时。什么也没发生,有人能告诉我为什么吗?我没有收到任何错误,编译器似乎无法识别我的鼠标移
我正在尝试从外部小程序获取鼠标移动事件,如下所示: Applet loader = (Applet) new URLClassLoader( new URL[] { new F
我正在用java创建一个游戏。在其中,您控制一个跟随鼠标的方 block 。我想对正方形实现碰撞检测,以便它在 JFrame 内稍微停止,而不是在边缘处。使用箭头键执行此操作非常容易,但我无法使用 m
我是一名优秀的程序员,十分优秀!