将 jquery 变量重置为不存在的最低可能值
Resetting jquery varible to lowest possible value that doesn't exist
此脚本生成带有云图像的div,这些云图像以随机的高度和间隔从左向右飞行。它通常有效,但它会无限增加div "id"。我不知道如何重置安全的计数器,永远不会同时存在两个相同的"id"。
function cloudgenerator(){
var nr=1;
var t1 = 20000;
var t2 = 50000;
function cloud(type,time,nr){
$("#sky").append("<div id='"cloudFL"+nr+"'" class='"cloud"+type+"'" ></div>");
setTimeout(function() {
$("#cloudFL"+nr).css({top:Math.floor(Math.random() * 400)+'px'}).animate({
left:'100%',
},time,'linear',function(){$(this).remove();
});
}, Math.floor(Math.random() * t1));
};
function wave(){
var tx = 0;
setInterval(function(){
cloud(1,t1,nr);
nr++;
var n = $( "div.cloud1" ).length;
$( "span" ).text( "There are " + n +" n and "+ tx +" tx")
if(tx < n){tx = n}
else(tx = 1)
},500);
};
wave()};
cloudgenerator()
在底部,有一条指令检查div 的数量是否开始下降,并在 span 中显示这些值以进行调试。
快速简便的解决方案
您可以在 JQuery 中循环访问 id,从最小的数字开始,直到找到产生 0 结果的 JQuery 选择器......
var newid = 0;
var i = 1;
while(newid == 0) {
if( $('#cloudFL' + i).length == 0 ) { newid = i; }
else { i++; }
}
JSFIDDLE 演示
替代解决方案(可扩展)
鉴于您可能同时在屏幕上显示许多云,您可以尝试这种替代方法。此方法创建一个"已用 id"数组,然后 wave 函数在为云函数创建新 id 之前检查是否有任何"已用 id"可用。在屏幕上出现许多云的情况下,这将比"快速修复解决方案"更有效地运行。
function cloudgenerator(){
var nr=1;
var t1 = 20000;
var t2 = 50000;
var spentids = [];
function cloud(type,time,id){
$("body").append('<div id="' + id + '" class="cloud' + type + '" >' + id + '</div>');
setTimeout(function() {
$('#'+id).css({top:Math.floor(Math.random() * 400)+'px'}).animate({
left:'100%',
},time,'linear',function(){
spentids.push( $(this).attr('id') );
$(this).remove();
});
}, Math.floor(Math.random() * t1));
};
function wave(){
setInterval(function(){
if(spentids.length == 0) {
cloud(1,t1,"cloudFL" + nr);
nr++;
} else {
spentids = spentids.sort();
cloud(1,t1,spentids.shift());
}
},500);
};
wave()};
cloudgenerator()
JSFIDDLE 演示 - 替代
为什么不获取时间戳并将其添加到您的 id 中?
如果你不需要 ids,我会坚持@hon2a,只需将样式添加到类中并删除 id。
还有另一种解决方案:
您可以检查是否使用了 ID xyz。像这样,例如
var cloudCount = jQuery('.cloud20000').length + jQuery('.cloud50000').length + 10;
for(var i = 0; i <= cloudCount; i++) {
if(jQuery('#cloudFL' + i).length <= 0) {
nr = i;
return false;
}
}
cloud(1,t1,nr);
相关文章:
- 正在将事件处理程序添加到不存在的类
- javascript如果图像不存在don't加载它
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- Jquery-每个循环不更新变量
- JavaScript-如果以前不存在文本,如何从文本区域删除新行
- 如何将一个函数附加到一个不存在的元素上
- 在scala或scalajs Diode中,现有类型中的任何一种都符合“;更新一个没有'还不存在”;
- 处理 JavaScript 中不存在的变量
- 将不存在的属性的引用分配给变量
- Javascript Shadowing - 如果您尝试使用 VAR 关键字更改不存在的全局变量,则会产生效果
- 检查不存在的变量时控制流模式
- 将 jquery 变量重置为不存在的最低可能值
- 做一个“;不存在变量“;评估到“;未定义的“;非严格代码中的值
- 如何检查变量是未定义的(已声明但未赋值)还是未声明的(不存在)
- 变量在作用域中不存在(使用requirejs/backbone)
- 如果对象属性不存在,则创建普通变量回退的Javascript
- Javascript:检查变量是否为false,或者它是否根本不存在
- 条件变量是否存在,如果不存在则返回错误
- 在尝试检索不存在的数组条目后,javascript变量的状态
- JavaScript变量poofs在findById回调中不存在