gpt4 book ai didi

javascript - jquery html(array) 不会插入数组中的所有项目

转载 作者:行者123 更新时间:2023-12-02 17:50:53 24 4
gpt4 key购买 nike

当我运行下面的 JavaScript 代码时,它会从 Flickr 加载指定数量的图像。

通过 var photos = photoGroup.getPhotos(10) 代码,我从缓存中获取了 10 张图像。

然后,通过检查 console.log(photos);,我可以看到该对象正好有 10 个项目

但页面上实际出现的图片不到10条...

我不知道为什么会这样......

提前谢谢您。

<html>
<head>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script>
var PhotoGroup = function(nativePhotos, callback) {
var _cache = new Array();

var numberOfPhotosLoaded = 0;
var containerWidth = $("#contents").css('max-width');
var containerHeight = $("#contents").css('max-height');

$(nativePhotos).each(function(key, photo) {
$("<img src='"+"http://farm" + photo["farm"] + ".staticflickr.com/" + photo["server"] + "/" + photo["id"] + "_" + photo["secret"] + "_b.jpg"+"'/>")
.attr("alt", photo['title'])
.attr("data-cycle-title", photo['ownername'])
.load(function() {
if(this.naturalWidth >= this.naturalHeight) {
$(this).attr("width", containerWidth);
} else {
$(this).attr("height", containerHeight);
}

_cache.push(this);

if(nativePhotos.length == ++numberOfPhotosLoaded)
callback();
})
});

var getRandom = function(max) {
return Math.floor((Math.random()*max)+1);
}

this.getPhotos = function(numberOfPhotos) {
var photoPool = new Array();
var maxRandomNumber = _cache.length-1;

while(photoPool.length != numberOfPhotos) {
var index = getRandom(maxRandomNumber);

if($.inArray(_cache[index], photoPool))
photoPool.push(_cache[index]);
}

return photoPool;
}
}

var Contents = function() {
var self = this;
var contentTypes = ["#slideShowWrapper", "#video"];

var switchTo = function(nameOfContent) {
$(contentTypes).each(function(contentType) {
$(contentType).hide();
});

switch(nameOfContent) {
case("EHTV") :
$("#video").show();
break;
case("slideShow") :
$("#slideShowWrapper").show();
break;
default :
break;
}
}

this.startEHTV = function() {
switchTo("EHTV");

document._video = document.getElementById("video");
document._video.addEventListener("loadstart", function() {
document._video.playbackRate = 0.3;
}, false);
document._video.addEventListener("ended", startSlideShow, false);
document._video.play();
}

this.startSlideShow = function() {
switchTo("slideShow");
var photos = photoGroup.getPhotos(10)
console.log(photos);
$('#slideShow').html(photos);
}

var api_key = '6242dcd053cd0ad8d791edd975217606';
var group_id = '2359176@N25';
var flickerAPI = 'http://api.flickr.com/services/rest/?jsoncallback=?';
var photoGroup;

$.getJSON(flickerAPI, {
api_key: api_key,
group_id: group_id,
format: "json",
method: "flickr.groups.pools.getPhotos",
}).done(function(data) {
photoGroup = new PhotoGroup(data['photos']['photo'], self.startSlideShow);
});

}

var contents = new Contents();
</script>
</head>
<body>
<div id="slideShow"></div>
</body>
</html>

最佳答案

我根据 this article 修复了你的方法 getRandom() ,并完全重写方法 getPhotos():

    this.getPhotos = function(numberOfPhotos) {
var available = _cache.length;
if (numberOfPhotos >= available) {
// just clone existing array
return _cache.slice(0);
}

var result = [];
var indices = [];

while (result.length != numberOfPhotos) {
var r = getRandom(available);
if ($.inArray(r, indices) == -1) {
indices.push(r);
result.push(_cache[r]);
}
}

return result;
}

在此处查看完整解决方案:http://jsfiddle.net/JtDzZ/

但是这个方法仍然很慢,因为由于出现相同的随机数,循环可能会执行很长。

如果您关心性能,则需要创建其他稳定的解决方案。例如,仅随机化图像序列的第一个索引。

关于javascript - jquery html(array) 不会插入数组中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com