所以我尝试用随机图像旋转创建我自己的幻灯片。 有时,随机数计算的结果是未定义的。
$(document).ready(function () {
var slide = 2;
var si_array1 = [1, 2, 3];
var si_nindex1 = 0;
var si_index1 = 0;
var si_array2 = [1, 2, 3];
var si_nindex2 = 0;
var si_index2 = 0;
initSlider();
function initSlider() {
setupSlider();
function setupSlider() {
if(slide === 1) {
si_nindex1 = Math.floor(Math.random() * 10) % si_array1.length;
si_index1 = (si_nindex1 === si_index1) ? si_nindex1 -1 : si_nindex1;
updateSlider('#sl-one', 'sl-one', si_array1[si_index1]);
} else if(slide === 2) {
si_nindex2 = Math.floor(Math.random() * 10) % si_array2.length;
si_index2 = (si_nindex2 === si_index2) ? si_nindex2 -1 : si_nindex2;
updateSlider('#sl-two', 'sl-two', si_array2[si_index2]);
}
}
function updateNumber() {
if(slide === 1) {
slide = 2;
} else if(slide === 2) {
slide = 1;
}
setTimeout(initSlider, 5000);
}
function updateSlider(sliderid, slider, img_nr) {
$(sliderid).css('backgroundImage', 'url(/img/slides/' + slider + '/slide' + img_nr + '.jpg)');
updateNumber();
}
}
});
为什么会发生这种情况,我该如何解决? 谢谢你的帮助。
答案 0 :(得分:1)
我希望它不是未定义的随机数计算,而是结果:
si_array1[si_index1]
你在哪里:
si_nindex1 = Math.floor(Math.random() * 10) % si_array1.length;
si_index1 = (si_nindex1 === si_index1) ? si_nindex1 -1 : si_nindex1;
然后如果 si_nindex1 且 si_index1 都为0,则 si_index1 将设置为-1并且:
si_array1[si_index1]
将返回 undefined 。
答案 1 :(得分:0)
这不是未定义的随机数计算,而是si_array1[si_index1]
。当si_nindex1
在第一个循环中等于0
时,您将si_index1
设置为-1
,因此您尝试访问不存在的si_array1[-1]
。
您可以略微修改代码以避免此问题,例如添加以下行:
si_index1 = (si_index1 < 0) ? si_index1 + 2 : si_index1;
所以你的代码变成了:
$(document).ready(function () {
var slide = 2;
var si_array1 = [1, 2, 3];
var si_nindex1 = 0;
var si_index1 = 0;
var si_array2 = [1, 2, 3];
var si_nindex2 = 0;
var si_index2 = 0;
initSlider();
function initSlider() {
setupSlider();
function setupSlider() {
if(slide === 1) {
si_nindex1 = Math.floor(Math.random() * 10) % si_array1.length;
si_index1 = (si_nindex1 === si_index1) ? si_nindex1 -1 : si_nindex1;
si_index1 = (si_index1 < 0) ? si_index1 + 2 : si_index1; //Code added
updateSlider('#sl-one', 'sl-one', si_array1[si_index1]);
} else if(slide === 2) {
si_nindex2 = Math.floor(Math.random() * 10) % si_array2.length;
si_index2 = (si_nindex2 === si_index2) ? si_nindex2 -1 : si_nindex2;
si_index2 = (si_index2 < 0) ? si_index2 + 2 : si_index2; //Code added
updateSlider('#sl-two', 'sl-two', si_array2[si_index2]);
}
}
function updateNumber() {
if(slide === 1) {
slide = 2;
} else if(slide === 2) {
slide = 1;
}
setTimeout(initSlider, 5000);
}
function updateSlider(sliderid, slider, img_nr) {
$(sliderid).css('backgroundImage', 'url(/img/slides/' + slider + '/slide' + img_nr + '.jpg)');
updateNumber();
}
}
});