如何将 while 循环添加到随机发生器
How to add while loop to randomizer
我正在尝试学习JavaScript,并创建了一个网站,该网站从数组中随机化gif点击。
我现在想做的是插入一个 while 循环,以便它将当前 gif 与下一个随机图像进行比较,这样就不会显示重复项,但我无法完全弄清楚我做错了什么,很可能是语法问题。
.HTML
<!DOCTYPE html>
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
<html>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="js/rand.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css">
<head>
<title>Randomizer</title>
</head>
<body>
<p>This image is random</p>
<a href="#" class="click">
<section>
<img>
<script>
getRandomImage()
</script>
</img>
</section>
</a>
</body>
</html>
JavaScript
var randomImage = new Array();
randomImage[0] = "images/1.gif";
randomImage[1] = "images/2.gif";
randomImage[2] = "images/3.gif";
function getRandomImage() {
var number = Math.floor(Math.random()*randomImage.length);
document.write('<img src="'+randomImage[number]+'" />');
}
$(function() {
$('a.click').click(function(e) {
e.preventDefault();
var number = Math.floor(Math.random()*randomImage.length);
$(this).html('<img src="'+randomImage[number]+'" />');
});
});
你首先需要得到它是哪个图像:
function returnImgNum(){
var imgNum = parseInt($('img').attr('src').split("/")[1].replace('.gif', ""));
return imgNum;
}
然后做一个可循环的函数(或者只是做一个while循环,我喜欢这样做)
function placeRand(number){
if(number != returnImgNum()){
document.write('<img src="'+randomImage[number]+'" />');
} else {
placeRand(number){
}
}
然后将该比较器循环添加到函数中:
function getRandomImage() {
var number = Math.floor(Math.random()*randomImage.length);
placeRand(number);
}
var random_images_array = ['smile.gif', 'frown.gif', 'grim.gif', 'bomb.gif'];
function getRandomImage(imgAr, path) {
path = path || 'images/'; // default path here
var num = Math.floor( Math.random() * imgAr.length );
var img = imgAr[ num ];
var imgStr = '<img src="' + path + img + '" alt = "">';
document.write(imgStr); document.close();
}
查看此链接。它告诉你你需要知道的一切。
http://www.dyn-web.com/code/basics/random_image/random_img_js.php
创建数组,放入所有图像名称(或它们的索引,如果它更适合您),然后使用如下所示的内容:
var images = ["/first.png", "/second.png", "/third.png", "/fourth.png", "/fifth.png"];
function takeImage() {
// if there is no more images in array, do something or return placeholder image
//if (!images.length) doSomething();
var image = images.splice(Math.floor(Math.random() * images.length), 1);
return image[0];
}
基本上,每次调用时此函数将返回一个随机图像名称(如果需要,也可以返回索引),直到此数组中没有图像。
很简单,您将最后一个图像保存在函数之外。这将创建一个全局变量。全局变量是存在于所有函数中的变量,因为局部变量仅存在于函数本身中(其他函数无法使用它)。
// Define it outside of the function so the next time the called
// function gets it still has a value:
var lastNumber=0;
var imagesLength = randomImage.length; // don't recalc the amount of images every time
function getRandomImage(){
var number=0; // start a local variable
while( number == lastNumber){
number = Math.floor(Math.random()*imagesLength );
}
document.write('<img src="'+randomImage[number]+'" />');
}
为了扩展局部/全局变量,lastNumber
是全局的,因此可以在函数中访问。 但是var number
是本地的,它只存在于函数中,console.log(number);
函数外部将被undefined
要提出改进建议,最好避免document.write
。浏览器不喜欢它们(*找不到要支持的文档,请随意编辑),预先创建一个图像,即使它是空白的:
<img id="RandomImage" src="transparant.png" />
现在你创建一个全局变量(这只能在 javascript 在源中的图像之后加载时完成,或者准备好文档时完成)来存储图像,并使用它:
// save reference to image, global (before the function):
var Image2Random = document.getElementById('RandomImage');
// place this instead of the document write.
Image2Random.src = randomImage[number];
这会快得多。Javascript 现在知道要更改什么图像,它不必每次调用都创建一个新图像(将元素插入 DOM 的资源成本很高),并且仅更改源代码.src
非常快。
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 使用当前日期生成随机id
- 从a-z中随机选择一个字母
- RequireJ无法随机加载脚本
- 单击按钮时显示随机字符串
- Ajax更新面板随机错误'PRM_MissingPanel'
- 如何检查if/else语句中的随机条件
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取
- 如何使用D3生成特定范围内的随机颜色
- 如何在 Javascript/jQuery 中获取一些随机下拉列表的选定值
- 在固定位置显示随机图像
- 有效地获取两个区间之间的随机整数
- 如何获得随机灯光颜色
- 设置随机数,然后每5秒随机减少一次,直到达到0(javascript)
- 阵列中随机图像的问题
- 显示数字,然后每5秒随机更改一次(javascript)
- 使用JS按顺序显示图像,而不是随机显示
- 如何将 while 循环添加到随机发生器
- JQuery 字符串“随机发生器”聚类字符
- JavaScript不工作?随机函数发生器的代码