- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 javascript 程序遇到一些问题。我正在尝试做一个java脚本函数,让小点落下,产生雪的错觉。
我想要两件事,但我不知道该怎么做:
看看我的代码:
var x = [];
var y = -20;
var yplus = [];
var xplus = []; // Variables here.
function fallstart() { // sets the snow position in the begining
var btn = document.getElementsByClassName("snow");
for (i = 0; i < x.length; i++) {
btn[i].style.left = x[i] + "px";
btn[i].style.top = y + "px";
}
}
function fall() { // This funtion updates the snow postion
var btn = document.getElementsByClassName("snow");
y = y + 2;
for (i = 0; i < x.length; i++) {
x[i] = x[i] + xplus[i];
btn[i].style.left = x[i] + "px";
btn[i].style.top = y + "px";
}
}
function keep() { // This funtion makes the snow fall and is the funtion that is called
var btn = document.getElementsByClassName("snow");
for (var i = 0; i < btn.length; i++) {
var rnd = 1280 * Math.random();
x.push(rnd);
}
for (var i = 0; i < btn.length; i++) {
var xacr = Math.random();
xplus.push(xacr);
}
for (var i = 0; i < btn.length; i++) {
var yacr = Math.random();
yplus.push(yacr);
}
fallstart();
setInterval(fall, 20);
}
<body onload="keep()">
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
</body>
最佳答案
您可以执行以下几项操作:
当您重复 fall()
方法时,请检查元素的高度。如果它比窗口大,则删除该元素(或者可以选择从顶部重新开始)。只需这样做:
// This funtion updates the snow postion
function fall() {
for (i = 0; i < snowflakes.length; i++) {
if (snowflakes[i].style.top > windowHeight) {
snowflakes[i].remove();
}
}
}
您可以从 Get the size of the screen, current web page and browser window 上的这篇文章中获取 javascript 中的窗口高度。 :
var windowHeight = (function() {
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0],
x = w.innerWidth || e.clientWidth || g.clientWidth,
y = w.innerHeight|| e.clientHeight|| g.clientHeight;
return y
})();
此外,无需使用每种方法在 dom 中搜索 .snow
元素。只需在一开始就将它们保存起来,如下所示:
var snowflakes = document.getElementsByClassName("snow")
尽量避免使用干扰性的 JavaScript,因此不要依赖 body 元素来启动 JavaScript 文件,只需将监听器直接放在 JavaScript 中,如下所示:
window.onload = keep
此外,无需为雪元素重复内联样式。
而不是这个:
<div class="snow" style="color: red; position: absolute; width: 8px; height: 8px; top:-3px; left:0px"> • </div>
使用这个:
.snow {
color: red;
position: absolute;
width: 8px;
height: 8px;
top:-3px;
left:0px
}
无需管理多个阵列。 DOM 元素只是附加了 DOM 内容的 JavaScript 对象。如果您想扩展自己的属性,您可以使用额外的信息来扩展它们。 注意:这会污染您不拥有的元素的属性,但如果您真的关心的话,只需为它们命名
function setDeltas() {
for (i = 0; i < snowflakes.length; i++) {
snowflakes[i].y_delta = getRandomInt(1, 2);
snowflakes[i].x_delta = getRandomInt(-1, 1);
}
}
现在每个元素都知道它应该移动多少
// global variables
var snowflakes = document.getElementsByClassName("snow")
var screenSize = (function() {
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0];
return {
width: w.innerWidth || e.clientWidth || g.clientWidth,
height: w.innerHeight|| e.clientHeight|| g.clientHeight
}
})();
// get started
window.onload = function startSnowfall() {
setInitialValues();
setInterval(fall, 20);
}
function setInitialValues() {
for (i = 0; i < snowflakes.length; i++) {
setInitialValue(snowflakes[i]);
}
}
function setInitialValue(snow) {
// set position
snow.style.top = getRandom(-50, 0) + "px";
snow.style.left = getRandom(0, screenSize.width) + "px";
// set deltas
snow.y_delta = getRandom(.5, 1.5);
snow.x_delta = getRandom(-.5, .5);
}
function getRandom(min, max) {
return Math.random() * (max - min) + min;
}
function fall() {
for (i = 0; i < snowflakes.length; i++) {
var snow = snowflakes[i];
var y_new = parseFloat(snow.style.top) + snow.y_delta
var x_new = parseFloat(snow.style.left) + snow.x_delta
snow.style.top = y_new + "px";
snow.style.left = x_new + "px";
// remove if we need to
if (y_new > screenSize.height) {
// snow.remove();
setInitialValue(snow);
}
}
}
.snow {
color: red;
position: absolute;
width: 8px;
height: 8px;
top:-3px;
left:0px
}
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
<div class="snow" > • </div>
关于javascript - 雪花 : start them falling with pause, 触摸 "ground"时将其移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27640373/
我制作了一个不透明度为 30% 的表单,我希望它覆盖在我的屏幕上,这样我就可以在上面绘制一个网格,同时仍然能够控制下面的任何程序。所以我希望我用网格创建的表单忽略我的鼠标事件,这样我就可以点击进入下面
我在一个放置在控件下的窗体上有一个面板。我将使用该面板绘制从黑色到透明的渐变,以模拟从控件转换的阴影。但是,面板下方会有其他控件,并且面板会捕获针对其下方面板的点击。 我怎样才能获得点击以“穿过”面板
我实现了这个有趣的页面: http://www.xthema.it/misc/christmas-matrix.html 我重试了三种不同的方式,但每次我都无法通过 Firefox 获得良好的性能结果
为什么当我大幅缩小时我的网站会“崩溃”? 是否有某些 CSS 属性可以解决这个问题? 这是指向相关网页的链接: http://www.raycavanaugh.com/per%20word.html
爱情就像是一团火焰,而我们就像是飞蛾。虽然知道自己可能会粉身碎骨,但是还是义无反顾的向前冲不回头。不过恋爱经历那两个月甜蜜期以后就是正常的了,所以很多人能够恋爱却走不到最后。
我尝试创建一个效果视频,例如:花落。我有一个主视频(main.mp4)和一个效果视频(flower_fall.mp4)。我想制作一个将 2 个视频合并的 output.mp4 视频,结果看起来主视频是
我正在处理汉字。我的某些字符不存在于 Unicode 中。我正在使用 PUA .ttf 来支持我的非通用字符。 当我打电话 UIFont fontWithName:@"BabelStoneHanPUA
TL; 博士 customize 中是否有一些标准的回退处理? 系统,用于处理部分无效的复合定制 变量,例如一个条目不是缺点的列表? 长版 emacs 的自定义机制非常强大,使用 复合 Materia
什么//$FALL-THROUGH$ Eclipse 中的评论是什么意思?我做了谷歌,但找不到任何东西。 最佳答案 它抑制了一个警告,告诉您没有 break;来自 case . 关于eclipse -
当我必须编写多个条件语句时,我通常使用 switch 语句,通常有三个或更多明确定义的条件。 但是,要处理包含失败行为的双条件语句,我经常在简单的if、else if、else 语句和 之间犹豫不决切
以下工作代码在接收 BOOT_COMPLETED 广播的 BroadcastReceiver 中运行。 //Create a transparent, untouchable view and att
这是我第一次尝试在面包板上编写 Raspberry Pi 和硬件按钮的代码。程序很简单,当检测到按下按钮时,打开面包板上的 LED 1 秒钟。我的代码似乎有效,但奇怪的是,每隔一段时间按下一个按钮就会
在第9讲中,老师说numberOfSectionsInTableView:方法默认返回1,但是当我创建自己的项目时,发现它默认返回0,导致我的表格 View 单元格消失了!我找到了问题所在,并通过使
所以我应该为大学项目制作一个 Javascript 版本的落石游戏。玩家控制一个矩形,该矩形应该从左向右移动而不会被掉落的物体击中。到达每一侧都会增加分数,而被击中则会减少分数。比赛结束为 0 分。
目前我正在开发一个应用程序,它从 Twitter API 读取流并将其解析为对象。目前我读取流并使用 DataContractJsonSerializer 中的 ReadObject(...) 制作我
我使用 Eclipse,所以对我来说,使用 //$FALL-THROUGH$ 注释是 switch 语句等的常见做法。但是我的同事使用 Netbeans 并质疑我到底用这些做什么。试图用谷歌搜索任何带
我正在解析文本文档并将大部分数据转换为关系格式。整个过程中使用了多种日期格式,但其中之一是“1997 年秋季”。 存储此信息的最佳方法是什么,该信息在某种意义上是非特定的(不是绝对日期),同时又不会丢
我想创建一个 UIView 来为下雨设置动画,它应该高于所有其他 View ,在最前面,但是透明的,并且它不应该在所有,因此在我实现它之前,点击它背后的 UI 的行为应该与现在完全一样。它会充当覆盖层
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why was the switch statement designed to need a break?
题目地址:https://leetcode.com/problems/minimum-falling-path-sum/description/ 题目描述 Given a square array
我是一名优秀的程序员,十分优秀!