前言
html5提供了File API,可以很好用于图片上传和本地预览的使用场景。
html结构
以下html片段表示了图片上传组件的文档结构,依赖Amaze UI样式框架。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36<div class="am-g">
<div class="am-form-group-sm am-u-sm-6">
<div class="am-form-group">
<label id="thumb-label">资讯缩略图{$queryResult['id']==null?'(新增图片预览)':'(已有图片展示)'}---尺寸{$picConfig.width} × {$picConfig.height}</label>
<div id="article-upload-preview" class="am-form-field am-radius" style="width: 100%; height: 200px;background-repeat:no-repeat;border: 0px;"></div>
</div>
</div>
<div class="am-form-group-sm am-u-sm-6">
<div class="am-form-group">
<div class="am-form-group am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-sm am-padding-xs">
<i class="am-icon-cloud-upload"></i> 请选择要上传的图片</button>
<input id="article-upload-file" name="picture" type="file" accept=".png,.jpg,.jpeg,.gif" multiple>
<input id="article-upload-file-hidden" name="" type="file" accept=".png,.jpg,.jpeg,.gif" multiple style="display: none">
</div>
<div id="article-upload-info">
<label>新增图片信息</label>
<div class="am-tabs" data-am-tabs>
<ul class="am-tabs-nav am-nav am-nav-tabs">
<li class="am-active"><a href="#tab1">图片名称</a></li>
<li><a href="#tab2">图片大小</a></li>
<li><a href="#tab3">图片修改时间</a></li>
</ul>
<div class="am-tabs-bd">
<div class="am-tab-panel am-fade am-in am-active" id="tab1">
</div>
<div class="am-tab-panel am-fade" id="tab2">
</div>
<div class="am-tab-panel am-fade" id="tab3">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
使用效果如下图所示:
交互逻辑
图片上传DOM元素获取
1 | var preview = document.getElementById('article-upload-preview'), |
预览之前已经保存过的图片
1 | preview.style.backgroundImage = 'url("xxxxxxx")'; |
使用H5的API进行商品缩略图读取和预览-监听change事件
1 | fileInput.addEventListener('change', function () { |