- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在MooTools中实现一个串口下载图片的插件。假设在类 imageswrapper 的 div 中有带有 img 标签的图片。需要在加载下一个图像后持续下载每个图像,依此类推,直到所有图像都未加载。
window.addEvent('domready', function(){
// get all images in div with class 'imageswrapper'
var imagesArray = $$('.imageswrapper img');
var tempProperty = '';
// hide them and set them to the attribute 'data-src' to cancel the background download
for (var i=0; i<imagesArray.length; i++) {
tempProperty = imagesArray[i].getProperty('src');
imagesArray[i].removeProperty('src');
imagesArray[i].setProperty('data-src', tempProperty);
}
tempProperty = '';
var iterator = 0;
// select the block in which we will inject Pictures
var injDiv = $$('div.imageswrapper');
// recursive function that executes itself after a new image is loaded
function imgBomber() {
// exit conditions of the recursion
if (iterator > (imagesArray.length-1)) {
return false;
}
tempProperty = imagesArray[iterator].getProperty('data-src');
imagesArray[iterator].removeProperty('data-src');
imagesArray[iterator].setProperty('src', tempProperty);
imagesArray[iterator].addEvent('load', function() {
imagesArray[iterator].inject(injDiv);
iterator++;
imgBomber();
});
} ;
imgBomber();
});
最佳答案
我可以在这里看到几个问题。您实际上还没有说出问题是什么......这对您来说更像是代码审查/想法,直到您发布实际问题(或 jsfiddle)
您在 domready
中运行此代码浏览器可能已经根据 src 属性启动了图像下载。你最好发送data-src
在您开始之前直接从服务器
可能最大的问题是:var injDiv = $$('div.imageswrapper');
将返回一个集合 - 所以 [<div.imageswrapper></div>, ..]
- 不能使用 inject
因为目标可以是多个 dom 节点。使用 var injDiv = document.getElement('div.imageswrapper');
相反。
load
有问题事件和 .addEvent('load')
对于跨浏览器。它们需要在执行后清理,因为在 IE < 9 中,它将触发 load
例如,每次动画 gif 循环时。另外,你没有 onerror
和 onabort
处理程序,这意味着您的加载程序将在 404 或任何其他意外响应处停止。
你不应该使用 data-src
存储数据,速度很慢。 MooTools 有元素存储 - 使用 el.store('src', oldSource)
和 el.retrieve('src')
和 el.eliminate('src')
.快多了。
您将迭代器暴露给上层作用域。
使用 mootools api - 使用 .set()
和 .get()
而不是 .getProperty()
和 .setProperty()
for (var i)
迭代器用于异步操作是不安全的。应用程序的控制流将继续运行,不同的操作可能会引用错误的迭代器索引。查看您的代码,情况并非如此,但您应该使用 mootools .each(fn(item, index), scope)
来自 Elements
/Array
方法。
无论如何,你的问题已经在几个层次上得到了解决。
例如,我写了pre-loader - 一个与框架无关的图像加载器插件,可以使用 onProgress
以并行 或流水线(就像您尝试的那样)下载一组图像等事件 - 请参阅 http://jsfiddle.net/dimitar/mFQm6/ - 查看 readme.md 底部的屏幕截图:
MooTools 也通过 Asset.js 解决了这个问题(无需等待上一张图片)- http://mootools.net/docs/more/Utilities/Assets#Asset:Asset-image和 Asset.images 用于多个。查看灵感来源 - https://github.com/mootools/mootools-more/blob/master/Source/Utilities/Assets.js
这是一个通过我的预加载器类执行此操作的示例:http://jsfiddle.net/dimitar/JhpsH/
(function(){
var imagesToLoad = [],
imgDiv = document.getElement('div.injecthere');
$$('.imageswrapper img').each(function(el){
imagesToLoad.push(el.get('src'));
el.erase('src');
});
new preLoader(imagesToLoad, {
pipeline: true, // sequential loading like yours
onProgress: function(img, imageEl, index){
imgDiv.adopt(imageEl);
}
});
}());
关于javascript - 我的 mootools 延迟加载插件中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19721864/
我试图在Mootools [1.11版]中匹配多个CSS属性,如以下元素所示: 我想匹配具有type ='radio'和value ='dev'属性的元素。尝试了这个,但这不起作用 $$('inpu
问题:是否有到 mootools 核心及更多库的可靠/永久链接? 我升级了 mootools 幻灯片并使其可用 online如果有人需要的话。但希望有一个谷歌链接 对于 javascript 库,但没
我正在使用 MooTools 1.12 如何在悬停时将类添加到 a 元素? 例如 我有这个 Some text Some text Some text Some text anf 当鼠标悬停在链接上时
我继承了一个网站项目,其中大部分脚本都包含 mootools.js(大约 40k)。但是,凭直觉,我还没有看到它在哪里使用,考虑到这个项目的性质,咳咳,我认为它可能根本没有被使用! 今晚我“迫于压力”
我在 Google map 应用程序中使用 Mootools 来做一些事情,例如 bumpboxes 和其他东西。在我添加 Mootools 脚本之前,一切都 100% 正常工作,无论我是在声明我的全
如何使用 Mootools 通过 id 检查元素的存在 最佳答案 html: some content javascript var foo = document.id('foo'); // or $
我正在尝试将大约 200 行 jQuery 代码转换为 MooTools,以避免在现有站点上包含两个库。我只有一行有问题: new Element('span', {text: ' » '
Please select product ... 我尝试使用 Firefox 并且它工作正常 $('selectId').innertHTML = 'Test test' 但在 ie 上,它不
我有 5 个 a 元素需要注入(inject)额外的 span ,而不是创建新元素 5 次我怎么能只做一次呢?我试过了 var holders= $$('.holders'); holders.eac
我有 5 个 a 元素需要注入(inject)额外的 span ,而不是创建新元素 5 次我怎么能只做一次呢?我试过了 var holders= $$('.holders'); holders.eac
有人有在同一页面中使用 Closure js lib 和 Mootools 的经验吗? 有冲突还是工作正常? 最佳答案 根据谷歌: The names of all Closure Library f
我试图让 SqueezeBox 弹出窗口在打开页面时自动打开,但我使用的代码打开了弹出窗口,但弹出内容未加载。 我不太熟悉,因此我需要一些帮助来了解我做错了什么 window.addEvent('do
我正在学习 mootools。我有一个以下格式的数组。我想在 for 循环中遍历它,但不知道该怎么做。 {'apple' : { 'prize' : 10 , 'color' : 'Red' } ,
要在我的网站上设置元素的 html,我主要使用 $('elementId').innerHTML = "text"; 浏览 mootools 文档,我发现给出了这个例子: $('myElement')
我这里有一个 Mootools 1.1 类,我想将其在 Mootools 1.3 中运行。onComplete 函数不知何故无法将“数据”结果发送到 processResults 函数。 Ajax 调
我有这个 Mootools 1.11 脚本,它在提交表单后更新 div,表单将数据发送到“form.php”文件并返回类似“表单已发送”的消息。 我想把它转换成 mootools 1.4.1 Moot
我正在从服务器检索一些数据并更新 div 的 html 内容,如下所示: var req = new Request.JSON({ method: 'get', url: 'index
我看到了用 jquery 获取第二类名称的方法,但是如何在 mootools 中做到这一点,我的元素是 我需要匹配完整的类名,例如 li.parent.active 并调整高度(如果我尝试过该类存在
我正在使用 MooTools,但我似乎无法执行以下代码。我期望它将 #bar 元素的宽度增加到 50px,然后 alert() 带有“hi!”,并且然后继续将#bar的宽度增加到200px。不管出于什
我有一个当前正在调用 .hide() 的 Element 对象。相反,我想将整个元素(及其子元素)的不透明度淡出到 100%(隐藏),作为可能超过 500 毫秒或 1000 毫秒的过渡效果。 Fx.T
我是一名优秀的程序员,十分优秀!