javascript与image加载事件(onload)、加载状态(complete)
时间: 2023-09-01 10:03:21 浏览: 72
JavaScript与image加载事件(onload)、加载状态(complete)之间有着密切的关系。
当使用JavaScript加载图像时,可以使用`onload`事件来检测图像是否成功加载。`onload`事件是当图像完全加载时触发的事件,在图像加载完成后会执行相关的JavaScript代码。这个事件可以用于在图像加载完成后执行一些操作,例如修改图像的属性、切换图像等。
图像加载状态也可以通过JavaScript的`complete`属性来检测。当图像已经完全加载到浏览器中时,该属性的值会变为`true`,表示加载完成。这个属性可以用于判断图像是否已经加载完毕,可以用于控制相关的逻辑和操作。
通过组合使用`onload`事件和`complete`属性,可以实现一些比较复杂的图像加载控制逻辑。比如可以使用`onload`事件来等待图像加载完成后再执行相关的操作,或者使用`complete`属性定期轮询图像加载状态,来判断是否需要进行某些处理。
总之,JavaScript的`onload`事件和`complete`属性是用于处理图像加载的两个重要概念。利用这两个特性,可以对图像进行加载控制和相关处理,提高用户体验和网页交互性。
相关问题
小程序共用加载等待页面
在小程序中,可以使用公共组件来实现共用的加载等待页面。具体步骤如下:
1. 在小程序根目录下创建一个 `components` 文件夹,并在该文件夹下创建一个 `loading` 组件目录,包含 `loading.wxml`、`loading.wxss`、`loading.js` 和 `loading.json` 四个文件。
2. 在 `loading.wxml` 文件中编写加载等待页面的代码,例如:
```html
<view class="loading">
<image src="../../images/loading.gif"></image>
<text>加载中...</text>
</view>
```
3. 在 `loading.wxss` 文件中编写加载等待页面的样式,例如:
```css
.loading {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 100%;
}
.loading image {
width: 64rpx;
height: 64rpx;
}
.loading text {
margin-top: 10rpx;
font-size: 32rpx;
color: #999;
}
```
4. 在 `loading.js` 文件中编写组件逻辑代码,例如:
```javascript
Component({
options: {
addGlobalClass: true
},
properties: {
show: {
type: Boolean,
value: false
}
},
methods: {
// 隐藏加载等待页面
hide: function() {
this.setData({
show: false
});
}
}
})
```
其中,`options` 中的 `addGlobalClass` 属性可以让组件的样式类也可以被引用方所引用,即可以在任何页面中使用该组件。
5. 在 `loading.json` 文件中配置组件信息,例如:
```json
{
"component": true,
"usingComponents": {}
}
```
6. 在需要使用加载等待页面的页面中,引入 `loading` 组件,并设置 `show` 属性来控制加载等待页面的显示和隐藏,例如:
```html
<loading show="{{loadingShow}}"></loading>
```
7. 在页面中需要进行数据加载的时候,设置 `loadingShow` 属性为 `true` 显示加载等待页面,在数据加载完成后,设置 `loadingShow` 属性为 `false` 隐藏加载等待页面。例如:
```javascript
Page({
data: {
loadingShow: false
},
onLoad: function() {
var that = this;
that.setData({
loadingShow: true
});
wx.request({
url: 'https://example.com/api/example',
success: function(res) {
// 请求成功,处理返回数据
console.log(res.data);
},
fail: function(res) {
// 请求失败,处理错误
console.log(res.errMsg);
},
complete: function() {
that.setData({
loadingShow: false
});
}
})
}
})
```
通过以上步骤,就可以实现在小程序中共用加载等待页面了。
html 异步加载jsQR.js 实例
以下是一个使用HTML异步加载jsQR.js的示例:
```html
<!DOCTYPE html>
<html>
<head>
<title>异步加载jsQR.js示例</title>
</head>
<body>
<h1>使用jsQR.js解码二维码</h1>
<canvas id="canvas" width="300" height="300"></canvas>
<div id="result"></div>
<script>
function loadScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (script.readyState) { // IE
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else { // Others
script.onload = function() {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
// 异步加载jsQR.js
loadScript("https://cdn.jsdelivr.net/npm/jsqr@2.0.4/dist/jsQR.min.js", function() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var resultDiv = document.getElementById("result");
// 获取摄像头或文件上传的图片
navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
// 摄像头
var video = document.createElement("video");
video.srcObject = stream;
video.play();
// 每隔200ms检测一次
setInterval(function() {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var code = jsQR(imageData.data, imageData.width, imageData.height);
if (code) {
resultDiv.innerHTML = "二维码内容是:" + code.data;
}
}, 200);
}).catch(function(error) {
// 文件上传的图片
var img = new Image();
img.src = "qrcode.png";
img.onload = function() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var code = jsQR(imageData.data, imageData.width, imageData.height);
if (code) {
resultDiv.innerHTML = "二维码内容是:" + code.data;
}
};
});
});
</script>
</body>
</html>
```
在上面的示例中,我们使用了`loadScript`函数来异步加载`jsQR.js`。在加载完成后,我们使用`jsQR`函数来解码二维码,并在页面上显示结果。我们还使用了`getUserMedia`函数来获取摄像头的视频流,并每隔200ms检测一次,以便在摄像头中检测到二维码时及时显示结果。如果使用的是文件上传的图片,则直接在图片加载完成后检测二维码并显示结果。