使用计时器将 parent child 图片移动 1px
Move parent child picture by 1px with a timer
我正在尝试重建 Space 入侵者。但仅在 Javascript 中没有 jQuery 等。
现在我为火箭队打造了一个“家”:
var image = document.createElement('img');
image.setAttribute('src', 'Rakete.gif');
image.setAttribute("style",
"position:absolute; left:" + x2 + "px; top:bottom; bottom:55px;");
我用这个将它添加到正文中:
document.body.appendChild(image);
现在我的问题是:如何将每秒 bottom:55px;
替换为 +1px
?
我把这一切都放在一个带有计时器的函数中。我的问题只是我不知道如何替换 every child 的 bottom
。我需要为每个 child.
增加 bottom
首先为所有此类图像设置 class 更容易:
image.setAttribute("class", "rocket");
您的计时器需要如下所示:
var rockets = document.getElementsByClassName("rocket"); // Gets all elements with class “rocket”
setInterval(function(){
var maximumHeight = window.innerHeight; // maximum value for bottom before element gets removed
for(var i = 0; i < rockets.length; i++){ // Now, iterate over every element with class “rocket” with a for loop
rockets[i].style.bottom = (Number( // Convert the following into a number
rockets[i] // the element
.style // its CSS data
.bottom // the bottom property
.match(/[\+\-]?(?:\d*\.?\d+)/) // the number part of it (in any format)
) + 1) // increment!
+ "px"; // plus the string 'px'
if(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) > maximumHeight){
// If maximum height is exceeded
rockets[i].remove(); // Remove that child
}
}
},
1000); // 1000ms = 1s
或总结:
var rockets = document.getElementsByClassName("rocket");
setInterval(function(){
var maximumHeight = window.innerHeight;
for(var i = 0; i < rockets.length; i++){
rockets[i].style.bottom =
(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) + 1) + "px";
if(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) > maximumHeight){
rockets[i].remove();
}
}
}, 1000);
这只是每秒操作 CSS 数据。
只有一件事需要注意:....match(/…/)
将 return 一个 Array
如果找到一个数字或 null
如果没有找到(例如,如果 bottom
属性 尚未设置并且为空或无效)。这对 Number()
无关紧要! Number(['42'])
仍然 return 数字 42
和 Number(null)
安全 returns 0
.
如果您确实有自己的后备号码(例如),您可以使用 ||
OR 运算符:
rockets[i].style.bottom =
(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/) || 55) + 1) + "px";
ECMAScript 2015+ 方法
const rockets = document.getElementsByClassName("rocket"),
numberPattern = /[\+\-]?(?:\d*\.?\d+)/;
setInterval(() => {
const maximumHeight = window.innerHeight;
Array.from(rockets).forEach((rocket) => {
rocket.style.bottom = (Number(elem.style.bottom.match(numberPattern)) + 1) + "px";
if(Number(rocket.style.bottom.match(numberPattern)) > maximumHeight){
rocket.remove();
}
});
}, 1000);
我正在尝试重建 Space 入侵者。但仅在 Javascript 中没有 jQuery 等。 现在我为火箭队打造了一个“家”:
var image = document.createElement('img');
image.setAttribute('src', 'Rakete.gif');
image.setAttribute("style",
"position:absolute; left:" + x2 + "px; top:bottom; bottom:55px;");
我用这个将它添加到正文中:
document.body.appendChild(image);
现在我的问题是:如何将每秒 bottom:55px;
替换为 +1px
?
我把这一切都放在一个带有计时器的函数中。我的问题只是我不知道如何替换 every child 的 bottom
。我需要为每个 child.
bottom
首先为所有此类图像设置 class 更容易:
image.setAttribute("class", "rocket");
您的计时器需要如下所示:
var rockets = document.getElementsByClassName("rocket"); // Gets all elements with class “rocket”
setInterval(function(){
var maximumHeight = window.innerHeight; // maximum value for bottom before element gets removed
for(var i = 0; i < rockets.length; i++){ // Now, iterate over every element with class “rocket” with a for loop
rockets[i].style.bottom = (Number( // Convert the following into a number
rockets[i] // the element
.style // its CSS data
.bottom // the bottom property
.match(/[\+\-]?(?:\d*\.?\d+)/) // the number part of it (in any format)
) + 1) // increment!
+ "px"; // plus the string 'px'
if(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) > maximumHeight){
// If maximum height is exceeded
rockets[i].remove(); // Remove that child
}
}
},
1000); // 1000ms = 1s
或总结:
var rockets = document.getElementsByClassName("rocket");
setInterval(function(){
var maximumHeight = window.innerHeight;
for(var i = 0; i < rockets.length; i++){
rockets[i].style.bottom =
(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) + 1) + "px";
if(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/)) > maximumHeight){
rockets[i].remove();
}
}
}, 1000);
这只是每秒操作 CSS 数据。
只有一件事需要注意:....match(/…/)
将 return 一个 Array
如果找到一个数字或 null
如果没有找到(例如,如果 bottom
属性 尚未设置并且为空或无效)。这对 Number()
无关紧要! Number(['42'])
仍然 return 数字 42
和 Number(null)
安全 returns 0
.
如果您确实有自己的后备号码(例如),您可以使用 ||
OR 运算符:
rockets[i].style.bottom =
(Number(rockets[i].style.bottom.match(/[\+\-]?(?:\d*\.?\d+)/) || 55) + 1) + "px";
ECMAScript 2015+ 方法
const rockets = document.getElementsByClassName("rocket"),
numberPattern = /[\+\-]?(?:\d*\.?\d+)/;
setInterval(() => {
const maximumHeight = window.innerHeight;
Array.from(rockets).forEach((rocket) => {
rocket.style.bottom = (Number(elem.style.bottom.match(numberPattern)) + 1) + "px";
if(Number(rocket.style.bottom.match(numberPattern)) > maximumHeight){
rocket.remove();
}
});
}, 1000);