javascript - 尝试通过随机定位加载多个元素

标签 javascript random

所以我还不是很擅长 JS,但我发现这个代码块完全可以满足我的需要 - 获取一个元素并使其位置随机。问题是这仅在我使用 getElementById 时有效,但我想用大约 12 个不同的元素来执行此操作,而不仅仅是一个。

我试过给他们所有相同的类并使用 getElementsByClassName,我试过使用 querySelector,我试过 querySelectorAll - With这些示例中的每一个代码要么不起作用,要么仅适用于第一个元素。

标记:

<div id="1" class="rando">
     <img src="someIMG" alt="logo" itemprop="image">
</div>

<div id="2" class="rando">
    <iframe width="200" height="250" src="someURL" frameborder="0" ></iframe>
</div>

JS:

function getRandomPosition(element) {
    var x = document.body.offsetHeight-element.clientHeight;
    var y = document.body.offsetWidth-element.clientWidth;
    var randomX = Math.floor(Math.random()*x);
    var randomY = Math.floor(Math.random()*y);
    return [randomX,randomY];
}

window.onload = function() {
    var rpos = document.getElementsByClassName("rando");
    rpos.setAttribute("style", "position:absolute;");
    document.body.appendChild(rpos);
    var xy = getRandomPosition(rpos);
    rpos.style.top = xy[0] + 'px';
    rpos.style.left = xy[1] + 'px';
}

我也试过将它们放在一个循环中,但这也不起作用:

function getRandomPosition(element) {
    var x = document.body.offsetHeight-element.clientHeight;
    var y = document.body.offsetWidth-element.clientWidth;
    var randomX = Math.floor(Math.random()*x);
    var randomY = Math.floor(Math.random()*y);
    return [randomX,randomY];
}

window.onload = function() {
    var rpos = document.querySelector("#1, #2");
    for (var i = 0; i &lt; rpos.length; i++) {
        rpos.setAttribute("style", "position:absolute;");
        document.body.appendChild(rpos);
        var xy = getRandomPosition(rpos);
        rpos.style.top = xy[0] + 'px';
        rpos.style.left = xy[1] + 'px';
    }
}

我们一如既往地非常感谢任何帮助/指导!

谢谢!

最佳答案

你几乎成功了。在您的 for 循环中,您对整个 HTMLCollection rpos 进行操作,而不是对每个单独的元素进行操作。例如,这行 rpos.setAttribute("style", "position:absolute;"); 所做的是为此元素集合运行 setAttribute,而不是 对于这个集合中的每个元素,我们应该运行 setAttribute。稍作调整即可得到:

function getRandomPosition(element) {
  var x = document.body.offsetHeight - element.clientHeight;
  var y = document.body.offsetWidth - element.clientWidth;
  var randomX = Math.floor(Math.random() * x);
  var randomY = Math.floor(Math.random() * y);
  return [randomX, randomY];
}

window.onload = function() {
  const rpos = document.getElementsByClassName("rando");
  for (let rpo of rpos) {
    rpo.setAttribute("style", "position:absolute;");
    document.body.appendChild(rpo);
    var xy = getRandomPosition(rpo);
    rpo.style.top = xy[0] + "px";
    rpo.style.left = xy[1] + "px";
  }
};
<div id="1" class="rando">
     <img src="someIMG" alt="logo" itemprop="image">
</div>

<div id="2" class="rando">
    <iframe width="200" height="250" src="someURL" frameborder="0" ></iframe>
</div>

<p class="rando">Test A</p>
<p class="rando">Test B</p>
<p class="rando">Test C</p>

关于javascript - 尝试通过随机定位加载多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57442362/

相关文章:

r - Hausman 对 lme4 中的 "glmer"的规范测试

python - 排除 random.choice() 生成的特定字符

javascript - IE 8 的 toLocaleString()

javascript - 在中间件中获取响应状态码

c++ - 在范围之间创建一个随机偶数

java - 如何检查数组的随机部分是否等于特定数组部分?

javascript - CORS 以获取 .js 内容 - Javascript

php - Web 应用程序 : Preprocess and send all items in one page load, 或将项目分成单独的客户端请求?

Javascript 正则表达式 : remove space(s) if not surrounded by a letter

Java 变量之间的随机