Javascript 生成';随机';x和y之间差值至少为100的数字
我试图在网页的横幅div中定位图像。图像需要沿x轴“随机”定位(使用CSSJavascript 生成';随机';x和y之间差值至少为100的数字,javascript,random,Javascript,Random,我试图在网页的横幅div中定位图像。图像需要沿x轴“随机”定位(使用CSSleft属性),因此在加载页面时,它们的显示并不总是相同的。我有以下脚本来执行此操作(它还设置了一个随机延迟,以便每次图像都以不同的时间顺序出现: for (var i = 1; i <= 5; i++) { var delay = Math.floor(Math.random() * 800) + 1; var xPos = Math.floor(Math.random() * 900) + 1;
left
属性),因此在加载页面时,它们的显示并不总是相同的。我有以下脚本来执行此操作(它还设置了一个随机延迟,以便每次图像都以不同的时间顺序出现:
for (var i = 1; i <= 5; i++) {
var delay = Math.floor(Math.random() * 800) + 1;
var xPos = Math.floor(Math.random() * 900) + 1;
$('#item'+i).css('left',xPos+'px').delay(delay).animate({ top: 18 }, { duration: 1000, easing: 'easeOutBounce' });
}
for(变量i=1;i 100){
近似匹配=真;
}
}
如果(近似匹配==真){
返回true;
}否则{
返回false;
}
}
随机图像放置();
基本上,它失败的地方在上面的do/while循环中。我不确定这样做的正确方法,但我基本上需要说“继续运行checkDiff函数,直到它返回true;当它返回true时,将newRandomNumber添加到数组中;如果它没有返回true,则再次运行它”
有人能帮我吗
非常感谢!一种可能的方法是: item0.x=//随机数 item1.x=item0.x+item0.width+100+(随机数) item2.x=item1.x+item1.width+100+(随机数)
等更新 抱歉,我没有意识到您需要对所有生成的值进行比较。这将起作用:
var isLessThanMinSeparation = function checkDiff(randomNumber, randomNumbers, minSeparation) {
var lessThan100 = false, // Flag for whether minSeparation has been maintained
i = 0; // Incrementer
console.log('randomNumber = ' + randomNumber);
for (i = 0; i < randomNumbers.length; i += 1) {
console.log('Diff between ' + randomNumbers[i] + ' and ' + randomNumber + ' = ' + Math.abs(randomNumbers[i] - randomNumber));
lessThan100 = lessThan100 || Math.abs(randomNumbers[i] - randomNumber) <= minSeparation;
}
return lessThan100;
};
var randomImagePlacement = function randomImagePlacement(numberOfItems, minSeparation) {
//numberOfItems = 5, // Total number of items
//minSeparation = 100, // Minimum number of pixels of separation between items
var randomNumbers = [], // Array 'container' to hold random numbers
randomNumber = 0, // Random number
i = 0; // Incrementer
for (i = 1; i <= numberOfItems; i += 1) {
while (isLessThanMinSeparation(randomNumber, randomNumbers, minSeparation)) {
randomNumber = Math.floor(Math.random() * 700) + 1;
}
randomNumbers.push(randomNumber);
}
return randomNumbers;
};
console.log(randomImagePlacement(5, 100));
var isLessThanMinSeparation=函数checkDiff(随机数,随机数,minSeparation){
var lessThan100=false,//是否已维护minSeparation的标志
i=0;//递增器
log('randomNumber='+randomNumber);
对于(i=0;i lessThan100=lessThan100 | | Math.abs(randomNumbers[i]-randomNumber)Math.floor((Math.random()*200)+100);返回一个介于100和200之间的随机数。很抱歉,Math.floor((Math.random()*100)+100);返回值在100到200之间,谢谢,但这不起作用,可能是因为它只是比较前面的随机值,而不是目前为止的任何随机值。因此,它仍然允许图像之间的距离在100像素以内。
var isLessThanMinSeparation = function checkDiff(randomNumber, randomNumbers, minSeparation) {
var lessThan100 = false, // Flag for whether minSeparation has been maintained
i = 0; // Incrementer
console.log('randomNumber = ' + randomNumber);
for (i = 0; i < randomNumbers.length; i += 1) {
console.log('Diff between ' + randomNumbers[i] + ' and ' + randomNumber + ' = ' + Math.abs(randomNumbers[i] - randomNumber));
lessThan100 = lessThan100 || Math.abs(randomNumbers[i] - randomNumber) <= minSeparation;
}
return lessThan100;
};
var randomImagePlacement = function randomImagePlacement(numberOfItems, minSeparation) {
//numberOfItems = 5, // Total number of items
//minSeparation = 100, // Minimum number of pixels of separation between items
var randomNumbers = [], // Array 'container' to hold random numbers
randomNumber = 0, // Random number
i = 0; // Incrementer
for (i = 1; i <= numberOfItems; i += 1) {
while (isLessThanMinSeparation(randomNumber, randomNumbers, minSeparation)) {
randomNumber = Math.floor(Math.random() * 700) + 1;
}
randomNumbers.push(randomNumber);
}
return randomNumbers;
};
console.log(randomImagePlacement(5, 100));
var randomizeImgPlacement = function randomizeImgPlacement() {
var i = 0,
delay = 0,
xPos = 0,
lastPos = 1000; //Default to 1000 so very first assignment has at least 100 difference
for (i = 1; i <= 5; i += 1) {
delay = Math.floor(Math.random() * 800) + 1;
do { //loop assignment of xPos
xPos = Math.floor(Math.random() * 900) + 1;
} while (Math.abs(xPos) - Math.abs(lastPos) >= 100); // while difference is < 100
$('#item' + i).css('left', xPos + 'px').delay(delay).animate({
top: 18
}, {
duration: 1000,
easing: 'easeOutBounce'
});
lastPos = xPos; //store lastPos for loop comparison
}
};