html - 单击 jQuery 后重复单击功能克隆 Div?
问题描述
继上一个问题之后,我现在有一个函数可以在单击后使用克隆创建 div 并将它们随机放置在页面上。
但是,我也希望能够单击一次按钮,然后一个接一个地创建一定数量的 div,而不必多次按下按钮。所以单击按钮一次,然后在页面上随机创建 10 个 div,一个接一个。好像有人在点击按钮。
我试过使用 setInterval,但我只能延迟点击和实际 div 出现之间的时间。我考虑过使用 for 循环并尝试在周围闲逛,但这也没有让我到任何地方。
感谢您的任何帮助!
{
$(function() {
$(".btn").click(function() {
let bodyWidth = document.body.clientWidth;
let bodyHeight = document.body.clientHeight;
let randPosX = Math.floor(Math.random() * bodyWidth);
let randPosY = Math.floor(Math.random() * bodyHeight);
let $clone = $(".words:first").clone().appendTo("body");
$clone.css({
left: randPosX,
top: randPosY,
});
});
});
}
body {
margin: 0;
padding: 0;
background-color: white;
}
.words {
position: relative;
color: black;
font-size: 20px;
left: 0;
top: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<h1 class="words">
Hello!
</h1>
<button class="btn" type="button">Click Me!</button>
</body>
解决方案
为了实现您的目标,您需要定义一个新调用,其中包含在随机位置setInterval()
创建元素的当前逻辑。h1
它所需要的只是额外检查有多少元素已添加到 DOM。如果它是 10 或更多,请调用clearInterval()
以停止创建更多。
$(function() {
let interval;
$(".btn").click(function() {
clearInterval(interval);
interval = setInterval(function() {
if ($('.words').length >= 10) {
clearInterval(interval);
return;
}
let bodyWidth = document.body.clientWidth;
let bodyHeight = document.body.clientHeight;
let randPosX = Math.floor(Math.random() * bodyWidth);
let randPosY = Math.floor(Math.random() * bodyHeight);
let $clone = $(".words:first").clone().appendTo("body");
$clone.css({
left: randPosX,
top: randPosY,
});
}, 500);
});
});
body {
margin: 0;
padding: 0;
background-color: white;
}
.words {
position: relative;
color: black;
font-size: 20px;
left: 0;
top: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 class="words">
Hello!
</h1>
<button class="btn" type="button">Click Me!</button>
推荐阅读
- html - 如何修复从移动设备查看时变得不可见的文本
- c++ - 为什么我的代码在第一个 if 语句处中断?
- material-ui - 如何将扩展面板图标位置更改为左侧?
- vba - 如何在不启动/打开访问数据库的情况下反编译它?
- python - 在 pd 数据帧中移动的 Excel 数据需要取消移位才能正确读取为 pd 数据帧
- angular - 惰性功能模块架构迁移到 NGRX:Angular 8
- sql-server - 使用介于之间的日期在 sum case 语句上发生错误
- kubernetes - 如何在 traefik 中使用 rewrite
- android - ConstraintLayout 使用 ConstraintSet
- geode - 在 Geode 的 Function.execute() 方法中访问自定义对象时发生 ClassCastException