gpt4 book ai didi

JavaScript null 不是垂直高度可变的对象和中心矩形

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:09 24 4
gpt4 key购买 nike

我在屏幕中间有一条线。以这条线为中心应该有一个矩形,我可以在某些事件(比如点击它)时改变它的位置和大小。更改 recangle 的 X 位置后,它总是需要完全显示在屏幕上,我需要更改至少超过 30px。

这是我当前的代码:

<html>
<head>
<title>B1</title>
<style type="text/css">

.line {
position:absolute;
top:50%;
width:100%;
height:1px;
background:black;
}

.rectangle {
position:absolute;
top: 50%;
left: 80%;
width: 200px;
height: 100px;
margin: 0 auto;
background: red;
}

</style>
</head>
<body>
<script type="text/javascript">

function changeRec() {
var elementStyle = document.getElementById("rectangle").style;
var newX = (Math.random() * window.screen.availWidth - 30) + 30;
if (newX > window.screen.availWidth - document.getElementById("rectangle").clientWidth) {
newX = window.screen.availWidth - document.getElementById("rectangle").clientWidth;
newX;
}
elementStyle.position = "relative";
}

document.onkeydown = onKey;
function onKey(e) { if (e == null) {
e = window.event;
}
switch (e.which || e.charCode || e.keyCode) {
case 32:
// space
changeRec();
break;
case 65: // a
break;
case 66:
// b
}
}

</script>

<hr class="line">
<div class="rectangle" id="rectangle" ></div>

我有两个问题:

  1. 矩形不在 Y 轴直线的中心。因为高度应该是可变的,所以我不能只设置固定边距。

  2. 我的 changeRec() 方法无法正常工作。有时它会将 X 位置设置为屏幕之外的值。

我对 JS、CSS 和 HTML 还是很陌生,所以非常感谢您的帮助,

最佳答案

所以我修改了您的代码并且似乎可以正常工作。以下是您似乎遇到的问题:

矩形垂直对齐方式

实现垂直对齐的一种解决方案是使用 transform:translateY,如下所示:

top:50%;
transform:translateY(-50%);

但是出于某种原因,我希望比我聪明的人可以解释一下,为了使矩形正确居中显示,我使用了 translateY(-43%)。也许 hRules 有一些奇怪的地方……

编辑:确实是因为 hr 及其边距。我将其边距设置为 0,translateY(-50%) 按预期工作。

关于移动Rect的问题,几个问题:

要选择矩形,正如人们在评论中所说,您需要使用:

document.getElementsByClassName("rectangle")[0]

虽然我认为您的编辑不再需要了。

在您的代码中,这一行:

var newX = (Math.random() * window.screen.availWidth - 30) + 30;

为什么是-30?矩形是 200px 宽。此外,-30 应与 availWidth 一起放在括号中。为了下面的代码片段,我将 availWidth 更改为 document.body.clientWidth 以说明 iFrame。所以我们有:

var newX = (Math.random() * (document.body.clientWidth -200));

此外,您无缘无故地将矩形的位置更改为相对位置。我刚刚删除了它。

最后,当为矩形的样式赋予新的左值时,不要忘记添加“px”。

无论如何,这是一个工作片段:

function changeRec() {
var elementStyle = document.getElementsByClassName("rectangle")[0].style;
var newX = (Math.random() * (document.body.clientWidth -200));
elementStyle.left = newX+"px";
}

document.onkeydown = onKey;
function onKey(e) { if (e == null) {
e = window.event;
}
switch (e.which || e.charCode || e.keyCode) {
case 32:
// space
changeRec();
break;
case 65: // a
break;
case 66:
// b
}
}
.line {
position:absolute;
top:50%;
width:100%;
height:1px;
margin:0px;
background:black;
}

.rectangle {
position:absolute;
top: 50%;
transform: translateY(-50%);
left: 50%;
width: 200px;
height: 100px;
background: red;
}
<hr class="line">
<div class="rectangle"></div>

关于JavaScript null 不是垂直高度可变的对象和中心矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com