如何在没有jQuery或延迟加载的情况下延迟背景图像
How to defer background images without jQuery or lazy loading
基于Patrick Sexton教程,我想以与img
相同的方式延迟背景图像:
<img src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-src="your-image-here">
<script>
function init() {
var imgDefer = document.getElementsByTagName('img');
for (var i=0; i<imgDefer.length; i++) {
if(imgDefer[i].getAttribute('data-src')) {
imgDefer[i].setAttribute('src',imgDefer[i].getAttribute('data-src'));
} } }
window.onload = init;
</script>
如何使用背景?
<div style="background:url(your-image-here)"></div>
需要更改的只是如何选择元素
document.querySelectorAll('div[data-src]');
以及我们如何设置值(这里不设置src
属性,我们需要设置style
属性)。
EDIT:我甚至会避免attribute
检查(在JavaScript中),因为我们的选择器会这样做。
标记(编辑代码:http://codepen.io/anon/pen/rryxoK)
function init() {
var imgDefer = document.querySelectorAll('div[data-src]');
var style = "background-image: url({url})";
for (var i = 0; i < imgDefer.length; i++) {
imgDefer[i].setAttribute('style', style.replace("{url}", imgDefer[i].getAttribute('data-src')));
}
}
window.onload = init;
.deferImage {
width: 800px;
height: 600px;
}
<div class="deferImage" data-src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Domestic-crested-duck-CamdenME.jpg/800px-Domestic-crested-duck-CamdenME.jpg"></div>
EDIT: To select by class name
你可以做同样的事情,但是你可以在init函数中改变背景,而不是source
<div id='my-div' style="" data-src="your-image-here"></div>
<script>
function init() {
var backgroundDefer = document.getElementById('my-div');
if(backgroundDefer.getAttribute('data-src')) {
backgroundDefer.style.background="url("+backgroundDefer.getAttribute('data-src')+")";
}
}
window.onload = init;
</script>
我试图使用getElementsByClassName()
,也最终得到backgroundDefer.getAttribute is not a function
错误。所以我最终注入id属性,以及data-src属性用作图像URI的占位符,并使用上述代码延迟背景图像。
我还必须首先在背景URI图像中创建一个空字符串。
<div id="my-div" class="parallax-background" data-stellar-background-ratio="0.7" data-src="https://d5y2y5rl4e57i.cloudfront.net/GWL_atl-108.jpg" style="background-image:url('')"></div>
<script>
function init() {
var backgroundDefer = document.getElementById('my-div');
//have to use document.getElementById in order to use getAttribute() function
if(backgroundDefer.getAttribute('data-src')) {
backgroundDefer.style="background-image:url("+backgroundDefer.getAttribute('data-src')+")";
}
}
window.onload = init;
</script>
如果你想做的是在纯JS中设置页面加载后的背景,使用:
window.onload="myFunction()";
其中myFunction
负责加载
相关文章:
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 如何在有延迟的情况下对两个代码进行积分
- jQuery-如何在给定延迟的情况下从元素中删除类
- 如何在不停止HTML呈现的情况下放置停止代码的延迟
- 在不使用外部库的情况下为JavaScript代码添加简单延迟
- 函数仅在键控事件延迟的情况下执行
- 如何在延迟或处理密集度较低的情况下使用JavaScript OnResize
- 默认情况下,浏览器延迟加载悬停图像
- 可以't使javascript文本效果在延迟的情况下正常工作
- 如何在没有jQuery或延迟加载的情况下延迟背景图像
- 我如何在不重写整个应用程序(Laravel + jQuery, SPA风格)的情况下块结果(延迟加载?)
- 我试图在不使用任何内置方法的情况下延迟此函数.为什么这行不通呢?