<html lang="en">
<head>
<title>Chapter 10: Example 1</title>
</head>
<body>
<img src="usa.gif" onclick="changeImg(this)" />
<img src="mexico.gif" onclick="changeImg(this)" />
<script>
var myImages = [
"usa.gif",
"canada.gif",
"jamaica.gif",
"mexico.gif"
];
function changeImg(that) {
var newImgNumber = Math.round(Math.random() * 3);
while (that.src.indexOf(myImages[newImgNumber]) != -1) {
newImgNumber = Math.round(Math.random() * 3);
}
that.src = myImages[newImgNumber];
}
</script>
</body>
</html>
该程序的作者在代码的解释中说:
while循环的目的是确保您不选择与当前图像相同的图像。如果myImages[newImgNumber]
中包含的字符串在当前图像的src属性中找到,那么您知道它是相同的,并且您需要获取另一个随机数。您将继续循环直到获得新图像,此时在现有弧中找不到myImages[newImgNumber]
,indexOf()
方法将返回-1,从而突破循环。
我根本无法得到解释。换句话说,任何人都可以用同样的方式解释我吗?代码来自Beginning Javascript 5e,Jeremy Mcpeak,Chapter Events。
答案 0 :(得分:1)
Math.random() * 3
给出0到3之间的数字。myImages[newImgNumber]
给出数组中某个图像名称的名称。例如,如果您致电changeImg(myImg)
且myImg为<img src="usa.gif" />
,则函数that.src
内的"usa.gif"
为that.src.indexOf("usa.gif")
,"usa.gif".indexOf("usa.gif")
(that.src.indexOf("canada.gif")
)将返回0,所以循环将继续,你将得到一个新的随机数。在下一次迭代中,它将是<?php
public function getData($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, 'token=' . $this->token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$res = json_decode($result);
curl_close($ch);
// sidenote: Always check, if json_decode was successful, it can return false on failure
if ( $res !== null ) {
// you get an array of objects, not an object, see your json input
echo $result[0]->{'id'};
}
//print_r($result);
}
,它将返回-1,因为&#34; canada.gif&#34;在&#34; usa.gif&#34;中找不到,它将返回-1,它将退出循环。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以像这样查看数组:
myImages[0] = "usa.gif";
myImages[1] = "canada.gif";
myImages[2] = "jamaica.gif";
myImages[3] = "mexico.gif";
因此,当您获得0-3之间的随机数时,您需要确保幻灯片中的下一个图像src与当前显示的src不同。
答案 3 :(得分:0)
myImages
数组myImages[newImgNumber]
将检索随机检索图像的相应名称,
所以它采用此名称并检查它是否与src
属性中的名称不匹配。
它通过调用indexOf
来执行此操作,该indexOf
返回在找到传入(参数)字符串的上下文字符串中的索引;如果没有找到,则strA.indexOf(strB);
返回-1。例如,indexOf
返回 strA 中的索引,其中 strB 存在。src
调用的结果不是 -1,则当前随机检索的图像名称与while
属性中的名称匹配。仅当结果为 -1时,此函数才会将它们视为不同的名称。 indexOf
循环可能有点难以理解,因为它可以从头到尾解决问题:只要indexOf
方法做找到随机检索的名称,然后它应该随机检索另一个名称并尝试直到while
返回-1,这意味着这个随机检索的名称是新的。
如果它是一个新名称,那么它会使它超过src
循环,然后将其分配给indexOf
属性。
[*]使用src
确定它们是否是相同的图像非常弱。例如,如果调用现有的baseWindow.GroupsStackPanel.Dispatcher.BeginInvoke(() =>
{
//You Code Here
baseWindow.GroupsStackPanel.Children.Add(i);
});
属性,例如“not-usa.gif”,则上述函数中的条件仍然表示它与“usa.gif”的名称相同,这显然是错误的