H5调用相机和相册更换头像


需求:H5调用手机的相机和相册从而实现更换头像的功能

这个功能是很常用的一个功能,因此做一个记录。

1.在头像img下加一个文件输入框

<input type="file" id="file" accept="image/*" capture='camera' multiple>

并隐藏之

1 <center>
2    <img src="images/Bitmap@2x.png" class="avatar">
3    <input type="file" id="file" accept="image/*" capture='camera' multiple>
4 </center>
1 #file {
2    display: none;
3 }

 

2.点击头像触发文件输入框点击事件

$(".avatar").click(function(){
    $("#file").trigger("click")
})

 

3.给ios去掉capture属性,这样iphone才能调用相册。这段代码可以提取到公共js里复用。

var file = document.querySelector('input');
if (getIos()&&file) {
    file.removeAttribute("capture");
}
function getIos() {
    var ua=navigator.userAgent.toLowerCase();
    if (ua.match(/iPhone\sOS/i) == "iphone os") {
        return true;
    } else {
        return false;
    }
}

 

4.通过js拿到上传的文件内容,转成base64编码并显示图片在页面上

 1 //转成base64
 2 $('input[type=file]').on('change', function () {
 3     var reader = new FileReader();
 4     reader.onload = function (e) {
 5         console.log(reader.result);  //或者e.target.result都是一样的,都是base64码
 6         $(".avatar").attr("src", reader.result);
 7      }
 8     reader.readAsDataURL(this.files[0])
 9     //filses就是input[type=file]文件列表,files[0]就是第一个文件,这里就是将选择的第一个图片文件转化为base64的码
10 }) 

 

5.实现效果页面展示

更换头像前的效果:

 

 更换头像后的效果:

附:获取File对象的方式为

frontFile = $('#file')[0].files[0]
console.log(frontFile)

控制台输出为:

我们可以通过封装File对象到FormData,与上传图片接口对接,如:

let formData
formData = new FormData()
formData.append('mFile',frontFile)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM