【发布时间】:2012-07-27 05:35:39
【问题描述】:
我是一个绝望的 javascript 新手,我正在尝试将动态创建的图像元素插入到 DOM 中,同时随机定位和旋转它们。
目前我基本上是这样做的:
- 创建一个包含所有图像文件路径的数组
- 使用动态创建的名称创建一个 div 并插入到 DOM 中
- 生成 20 个不同的图像实例并插入 DOM 到相应的 div 中
- 随机旋转每个图像并随机定位每个图像。对于旋转,我使用 jQuery 旋转插件。
我觉得我做这一切的方式非常愚蠢,因为我首先将元素插入 DOM,然后操纵它们的位置和旋转。
有没有办法先在虚拟内存中做所有事情,最后在所有操作都完成后将元素插入到 DOM 中?
这是我当前的代码(对于菜鸟的质量感到抱歉):
$(document).ready(function(){
var wrapper = $('#wrapper'),
function movieCreator(movieName, generateAmount){
var contents=new Array (
'<img class="film '+movieName+'" src="images/'+movieName+'01.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'02.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'03.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'04.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'05.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'06.png" alt="'+movieName+'" />',
'<img class="film '+movieName+'" src="images/'+movieName+'07.png" alt="'+movieName+'" />'
);
var tmp='';
var dynamicIdName = 'box'+movieName;
var dynamicIdCall = '#box'+movieName;
wrapper.append("<div id='"+dynamicIdName+"' class='moviebox'></div>");
var random
for (i=0; i < generateAmount;){
random = Math.floor(Math.random()*contents.length);
tmp += contents[random];
i++
};
$(dynamicIdCall).append(tmp);
$(".film").each(function(){
randomrot = Math.floor(Math.random()*360);
randomposX = Math.floor(Math.random()*200);
randomposY = Math.floor(Math.random()*200);
$(this).rotate(randomrot);
$(this).css({'top': randomposY -40});
$(this).css({'left': randomposX -40});
});
wrapper.on('click','.film',function(){
imageControl(this);
});
} //end movieCreator
movieCreator('terminator', 20);
movieCreator('rambo', 20);
movieCreator('godfather', 20);
movieCreator('matrix', 20);
movieCreator('kingkong', 20);
}); //dom ready
【问题讨论】:
-
JavaScript 已经在使用内存客户端,但是在元素以一种或另一种方式出现在页面上之前,无论是在加载时还是在通过 JavaScript 呈现之后,您才能操作它们,直到它们存在以某种形状或形式的 DOM。也就是说,您的实际问题是什么,这不是加载吗?打破?走很长的路?冻结浏览器?其他的?
-
它不是虚拟内存,但是你可以创建一个与 DOM 分离的 DOM 元素,然后在上面做任何你喜欢的事情。如果您使用 jQuery 创建元素,您可以获得包裹在 jQuery 中的元素,您可以在其中应用 jQuery 函数。但是无法完成需要元素在布局中的功能,例如获取元素的高度。应用 CSS 会起作用,不确定是否可以旋转,如果只是设置 CSS 应该也可以。
-
@chris 我想问题是我当前的代码花费了太长时间。客户可以清楚地看到正在创建和操作的元素。我试图应用这些 $(this).rotate(randomrot); $(this).css({'top': randomposY -40}); $(this).css({'left': randomposX -40});到“tmp”变量而不是获取 $('.film') 类,但这导致控制台错误,告诉图像元素没有旋转方法。
-
好吧,我不会说您没有太多事情要做,您是否考虑过使用您需要的属性在服务器端渲染图像,类似于您现在仅使用 javascript 的方式。也许通过首先将图像加载到 DOM 中然后对它们调用旋转可能会加快速度。
标签: javascript jquery