ZH奶酪:AngularJS/JavaScript上传图片【PC端】
【功能介绍】
类似与修改个人信息的时候,点击头像,就可以完成选择照片、上传照片等步骤达到替换头像的目的。
【运行流程】
(1)点击头像
(2)选择头像
(3)点击“完成”,上传头像
1.HTML图片部分的代码(个人信息还会包含姓名[id="name"]、介绍[id="intro"]元素等)
<div>
<img id="avatar"ng-src="{{avatar}}" ng-click="choosePicMenu()">
</div>
<input ng-hide="true" type="file" id="photoBtn" accept="image/*"onchange="picChange(event,'avatar')"/>
2.js核心代码
(1)选择图片
//点击图片,向id=“photoBtn”的元素发送click()事件,打开文件选择窗口,选择图片
$scope.choosePicMenu = function() {
$('#photoBtn').click();
}
//选择完图片之后,该input元素发生了change,激活onchange属性,执行picChange(event,'avatar')函数
//其中event指这个onchange事件,event.target指发生这个事件的元素,关于event更多介绍,请点:传送门
function picChange(event,imgId){
var files = event.target.files;
if(files && files.length >= 1){
var file = files[0];
//loadImage是javaScript插件javascript-load-image(传送门)中的功能
loadImage.parseMetaData(
file,
function (data) {
if (!data.imageHead) {
loadImage(
file,
function (img) {
var URL = window.URL || window.webkitURL;
var imgURL = img.toDataURL("image/png");
$('#'+imgId).attr('src', imgURL);
$('#' + imgId).attr('data-change', 1);
},
{maxWidth: 600,
canvas: true} // Options
);
return;
}
// Combine data.imageHead with the image body of a resized file
// to create scaled images with the original image meta data, e.g.:
// get orietation info.
if (data.exif && data.exif[0x0112]) {
var orientation = data.exif[0x0112];
loadImage(
file,
function (img) {
var URL = window.URL || window.webkitURL;
var imgURL = img.toDataURL("image/png");
$('#'+imgId).attr('src', imgURL);
$('#' + imgId).attr('data-change', 1);
},
{maxWidth: 600,
canvas: true,
orientation:orientation} // Options
);
} else {
loadImage(
file,
function (img) {
var URL = window.URL || window.webkitURL;
var imgURL = img.toDataURL("image/png");
$('#'+imgId).attr('src', imgURL);
$('#' + imgId).attr('data-change', 1);
},
{maxWidth: 600,
canvas: true} // Options
);
}
}
);
}
}
(2)上传图片
//新建一个FormData对象
var fd = new FormData();
//如果修改了图像,id=“avatar”的元素的“data-change”属性会为true
if($('#avatar').attr('data-change')){
var files = document.getElementById('photoBtn').files;
if(files && files.length >= 1){
fd.append('ffile',files[0]);//把图像添加到formData对象中
}
}
//获取姓名、介绍等其他元素
var name = $('#name').val();
var intro = $('#intro').val();
if(name){
fd.append('name',name);
}
if(intro){
fd.append('introduction',intro);
}
//使用XMLHttpRequest对象发送请求
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", $scope.updateComplete, false);
xhr.open("POST", "some url");
xhr.send(fd);
$scope.updateComplete = function(evt){
var resp = evt.target.responseText;
var respJson = $.parseJSON(resp);
if(respJson.status == 0){
console.log("success!");
}else{
console.log("fail");
}
};
ZH奶酪:AngularJS/JavaScript上传图片【PC端】的更多相关文章
- ZH奶酪:JavaScript调用AngularJS的函数/$scope/变量
使用背景: 需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过co ...
- ZH奶酪:PHP上传图片三个步骤
1. 上传图片三步骤 第一步:首先判断文件类型是否为图片格式,若是则上传文件; 第二步:然后重命名文件(一般都是避免上传文件重名,现在基本上都是以为时间来命名); 第三步:最后把文件上传到指定目录,成 ...
- ZH奶酪:JavaScript中的JSON.stringify() and JSON.parse()
JSON.stringify() JSON.stringify()可以将任意的JavaScript值序列化成JSON字符串. 语法 JSON.stringify(value[, replacer [, ...
- ZH奶酪:JavaScript清空数组的三种方法
参考链接:http://snandy.iteye.com/blog/893955 方式1,length赋值为0 目前 Prototype中数组的 clear 方法和mootools库中数组的 empt ...
- JavaScript判断移动端及pc端访问不同的网站
JavaScript判断移动端及pc端访问不同的网站 现在很多网站都是分为两个版本,一个pc端的一个移动端的(响应式除外),针对这两个版本,就需要对访问的设备进行判断,如果是pc,就直接访问pc网站, ...
- 【Javascript Demo】移动端访问PC端网页时跳转到对应的移动端网页
不想通过CSS自适应在PC端和移动端分别显示不同的样式,那么只能通过在移动端访问PC端网页时跳转到对应的移动端网页了,那么怎么跳转呢,网上也有很多文章说明,下面是本人测试有效的方式. 1.效果图 PC ...
- vue封装原生的可预览裁剪上传图片插件H5,PC端都可以使用
思路:1.先做出一个上传的图片的上传区 <!-- 上传区 --> <label for="fileUp"> <div class="upBo ...
- javascript检测客户端环境是否是pc端
//isPC(): 检测客户端环境是否是pc端 function isPC(){ let userAgent = navigator.userAgent; let agents = ["An ...
- ZH奶酪:IBG项目工作内容
IBG项目技术概览 (HTML/CSS/JavaScript/AngularJS/PHP/MySQL): (1)后台:PHP Yii2.0 Framework (2)前端:Ionic Framewor ...
随机推荐
- 沉浸式Web初体验
沉浸就是让人专注在当前的情境下感到愉悦和满足,而忘记真实世界的情境.心流理论能有力解释人们废寝忘食地投入一件事情的状态. 心流理论的核心就是说当人的技能与挑战最佳匹配时能达到心流状态.比如玩一个游戏, ...
- .NET:Attribute 入门(内训教程)
背景 接触过的语言中,C#(.NET 平台的多数语言都支持).Java 和 Python 都支持这个特性,本文重点介绍 C# 中的应用,这里简单的对 C#.java 和 Python 中的 Attri ...
- 在linux下创建自定义service服务
三个部分 这个脚本分为3个部分:[Unit] [Service] [Install]. Unit Unit表明该服务的描述,类型描述.我们称之为一个单元.比较典型的情况是单元A要求在单元B启动之后再启 ...
- JS --- 三目运算符
1.什么是三目运算:(布尔表达式 ? 值0:值1;) 5>3?alert('5大'):alert('3大'); 即 if(5>3){alert('5大')}else{alert('3 ...
- 【转】从源码来分析ListView
原文:http://yanmingming.sinaapp.com/?p=1251 原文其实不叫这个名字,本文对于原文有一定的修改,觉得这个名字比较适合本篇. 一.ListView 的工作原理 Ada ...
- [Web 前端] CSS篇之 4. position 和 display 的取值和各自的意思和用法
讲一讲CSS的position/float/display都有哪些取值,它们相互叠加时的行为都是什么? 列出display的值,说明他们的作用.position的值, relative和absolu ...
- C# WebBrowser控件使用整理
一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件, ...
- error “Device supports x86, but APK only supports armeabi-v7a”
checkout the build.gradle from module:app. It turns out that there's a such config: ndk { abiFilters ...
- poj 2348 Euclid's Game 题解
Euclid's Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9023 Accepted: 3691 Des ...
- 理解 Linux 的处理器负载均值
原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages 你可能对于 Linux 的负载均值(loa ...