You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
8.1 KiB
287 lines
8.1 KiB
5 years ago
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
|
<title>Cropper.js</title>
|
||
|
<link rel="stylesheet" href="../../../lib/css/mui.css">
|
||
|
<link href="../../../lib/css/basic.css" rel="stylesheet" />
|
||
|
<link rel="stylesheet" href="../../css/base.css">
|
||
|
<link rel="stylesheet" href="../../../lib/css/cropper.css">
|
||
|
<script src="../../../lib/js/mui.min.js"></script>
|
||
|
<script src="../../../lib/js/cropper.js"></script>
|
||
|
<script src="../../../lib/js/vue.js"></script>
|
||
|
<script src="../../../lib/js/app.js"></script>
|
||
|
<script src="../../js/base/rem-layout.js"></script>
|
||
|
<script type="text/javascript" src="../../js/my/my_ajax.js"></script>
|
||
|
<script src="../../../lib/js/require2.1.11.js"></script>
|
||
|
</head>
|
||
|
<style>
|
||
|
body,
|
||
|
html {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
#container {
|
||
|
position: absolute;
|
||
|
left: 0 !important;
|
||
|
right: 0 !important;
|
||
|
top: 0;
|
||
|
bottom: 0;
|
||
|
}
|
||
|
|
||
|
#img-content {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
#img-content #image {
|
||
|
max-width: 100%;
|
||
|
}
|
||
|
|
||
|
.cropper-view-box,
|
||
|
.cropper-face {
|
||
|
border-radius: 50%;
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
|
||
|
<body>
|
||
|
<div id="data-info">
|
||
|
<header class="mui-bar mui-bar-nav app-header app-header-darkly" >
|
||
|
<a class="mui-action-back mui-icon mui-icon-left-nav " ></a>
|
||
|
<a id="button" class="mui-pull-right" style="position: absolute; right: 12px;bottom: .28rem; color:#333333;" data-text="CropImageUse">{{langue.use}}</a>
|
||
|
</header>
|
||
|
<div id="container">
|
||
|
<div id="img-content">
|
||
|
<img id="image" alt="Picture">
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</body>
|
||
|
<script>
|
||
|
// 国际化
|
||
|
var langues = {
|
||
|
zh_CN: {
|
||
|
use: "使用",
|
||
|
ShowWaiting: "等待中...",
|
||
|
uploadError: "上传失败,请刷新后重试!",
|
||
|
AlterSuccessMsg: "修改成功!"
|
||
|
},
|
||
|
zh_HK: {
|
||
|
use: "使用",
|
||
|
ShowWaiting: "等待中...",
|
||
|
uploadError: "上傳失敗,請刷新後重試!",
|
||
|
AlterSuccessMsg: "修改成功!"
|
||
|
},
|
||
|
en_US: {
|
||
|
use: "use",
|
||
|
ShowWaiting: "Waiting...",
|
||
|
uploadError: "Upload failed, please refresh and try again!",
|
||
|
AlterSuccessMsg: "Modified successfully!"
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
<script>
|
||
|
var dataInfo = new Vue({
|
||
|
el: '#data-info',
|
||
|
data: {
|
||
|
langue: langues[app.getLanguageLocalStorage()],
|
||
|
}
|
||
|
})
|
||
|
|
||
|
function getRoundedCanvas(sourceCanvas) {
|
||
|
var canvas = document.createElement('canvas');
|
||
|
var context = canvas.getContext('2d');
|
||
|
var width = sourceCanvas.width;
|
||
|
var height = sourceCanvas.height;
|
||
|
|
||
|
canvas.width = width;
|
||
|
canvas.height = height;
|
||
|
context.imageSmoothingEnabled = true;
|
||
|
context.drawImage(sourceCanvas, 0, 0, width, height);
|
||
|
context.globalCompositeOperation = 'destination-in';
|
||
|
context.beginPath();
|
||
|
// context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true);
|
||
|
context.fill();
|
||
|
return canvas;
|
||
|
}
|
||
|
window.addEventListener('DOMContentLoaded', function() {
|
||
|
//获取头像图片
|
||
|
mui.plusReady(function() {
|
||
|
|
||
|
var image = document.getElementById('image');
|
||
|
var button = document.getElementById('button');
|
||
|
var result = document.getElementById('result');
|
||
|
|
||
|
var currentWebview = plus.webview.currentWebview();
|
||
|
image.src = currentWebview.imgSrc;
|
||
|
var cropper = new Cropper(image, {
|
||
|
dragMode: 'move',
|
||
|
aspectRatio: 1,
|
||
|
viewMode: 1,
|
||
|
autoCropArea: 0.65,
|
||
|
restore: false,
|
||
|
guides: false,
|
||
|
center: false,
|
||
|
highlight: false,
|
||
|
cropBoxMovable: false,
|
||
|
cropBoxResizable: false,
|
||
|
toggleDragModeOnDblclick: false,
|
||
|
});
|
||
|
|
||
|
button.onclick = function() {
|
||
|
var croppedCanvas;
|
||
|
var roundedCanvas;
|
||
|
|
||
|
if(!cropper) {
|
||
|
return;
|
||
|
}
|
||
|
// Crop
|
||
|
croppedCanvas = cropper.getCroppedCanvas();
|
||
|
// Round
|
||
|
roundedCanvas = getRoundedCanvas(croppedCanvas);
|
||
|
// base64图片
|
||
|
var imgBase64 = roundedCanvas.toDataURL("image/jpeg", 0.2);
|
||
|
// 截取base64字符串
|
||
|
var imgBase64Str = imgBase64.replace("data:image/jpeg;base64,", "");
|
||
|
plus.nativeUI.showWaiting(dataInfo.langue.ShowWaiting);
|
||
|
// 上传base64图片
|
||
|
uploadHeadImgFile(imgBase64Str);
|
||
|
};
|
||
|
})
|
||
|
});
|
||
|
|
||
|
function base64ToBlob(urlData) {
|
||
|
var arr = urlData.split(',');
|
||
|
var mime = arr[0].match(/:(.*?);/)[1] || 'image/png';
|
||
|
// 去掉url的头,并转化为byte
|
||
|
var bytes = window.atob(arr[1]);
|
||
|
// 处理异常,将ascii码小于0的转换为大于0
|
||
|
var ab = new ArrayBuffer(bytes.length);
|
||
|
// 生成视图(直接针对内存):8位无符号整数,长度1个字节
|
||
|
var ia = new Uint8Array(ab);
|
||
|
for(var i = 0; i < bytes.length; i++) {
|
||
|
ia[i] = bytes.charCodeAt(i);
|
||
|
}
|
||
|
return new Blob([ab], {
|
||
|
type: mime
|
||
|
});
|
||
|
}
|
||
|
|
||
|
//上传图片 返回新的图片名
|
||
|
function uploadHeadImgFile(imgBase64Str) {
|
||
|
mui.ajax(myAjaxJs.AJAX_UPLOAD_HEAD_IMG.getUrl, {
|
||
|
headers: {
|
||
|
"X-Requested-Token": app.getTokenStorage(), // token头部
|
||
|
"locale": app.getLanguageLocalStorage() // 语种头部
|
||
|
},
|
||
|
data: {
|
||
|
img: imgBase64Str
|
||
|
},
|
||
|
dataType: 'json', //服务器返回json格式数据
|
||
|
type: myAjaxJs.AJAX_UPLOAD_HEAD_IMG.getType, //HTTP请求类型
|
||
|
timeout: 10000,
|
||
|
success: function(data) {
|
||
|
if(data.code == "200") {
|
||
|
plus.nativeUI.closeWaiting();
|
||
|
if(data.data != null || data.data != "") {
|
||
|
// 更新缓存
|
||
|
var userData = app.getUserLocalStorage();
|
||
|
userData.avatar = data.data;
|
||
|
app.setUserLocalStorage(userData);
|
||
|
//上传头像到数据库
|
||
|
updateAvatar(data.data);
|
||
|
} else {
|
||
|
// mui.alert(langue.uploadError, langue.AlertMsg);
|
||
|
mui.toast(dataInfo.langue.uploadError);
|
||
|
}
|
||
|
} else if(data.code == "201" || data.code == "202") { //未登录
|
||
|
plus.nativeUI.closeWaiting();
|
||
|
mui.openWindow({
|
||
|
id: "mine/html/wallet_login.html",
|
||
|
url: "../wallet_login.html"
|
||
|
});
|
||
|
} else {
|
||
|
plus.nativeUI.closeWaiting();
|
||
|
mui.toast(data.msg);
|
||
|
}
|
||
|
},
|
||
|
error: function(xhr, type, errorThrown) {
|
||
|
plus.nativeUI.closeWaiting();
|
||
|
// mui.alert(langue.AjaxError2, langue.AlertMsg)
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function updateAvatar(avatar) {
|
||
|
mui.ajax(myAjaxJs.AJAX_UPDATE_AVATAR.getUrl, {
|
||
|
headers: {
|
||
|
"X-Requested-Token": app.getTokenStorage(), // token头部
|
||
|
"locale": app.getLanguageLocalStorage() // 语种头部
|
||
|
},
|
||
|
type: myAjaxJs.AJAX_UPDATE_AVATAR.getType, //HTTP请求类型
|
||
|
data: {
|
||
|
img: avatar
|
||
|
},
|
||
|
dataType: 'json', //服务器返回json格式数据
|
||
|
timeout: 10000, //超时时间设置为10秒;
|
||
|
success: function(data) {
|
||
|
plus.nativeUI.closeWaiting();
|
||
|
if("200" == data.code) {
|
||
|
synchrodataFun();
|
||
|
mui.back();
|
||
|
mui.toast(dataInfo.langue.AlterSuccessMsg);
|
||
|
} else if(data.code == "201" || data.code == "202") { //未登录
|
||
|
mui.openWindow({
|
||
|
id: "mine/html/wallet_login.html",
|
||
|
url: "../wallet_login.html"
|
||
|
});
|
||
|
} else {
|
||
|
mui.back();
|
||
|
app.toast(data.msg);
|
||
|
}
|
||
|
},
|
||
|
error: function(xhr, type, errorThrown) {
|
||
|
mui.back();
|
||
|
// app.toast(langue.AjaxError);
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 数据同步
|
||
|
*/
|
||
|
function synchrodataFun() {
|
||
|
//获取首页窗口,账户信息页窗口
|
||
|
var walletMyView = plus.webview.getWebviewById("mine/html/wallet_my.html");
|
||
|
var walletUserInfoListView = plus.webview.getWebviewById("mine/html/user/user_info_list.html");
|
||
|
walletMyView.evalJS("saveUserInfoData();");
|
||
|
walletUserInfoListView.evalJS("saveUserInfoData();");
|
||
|
}
|
||
|
|
||
|
// 国际化统一方法
|
||
|
window.addEventListener('switchLangueData', function(e) {
|
||
|
dataInfo.langue = langues[e.detail];
|
||
|
});
|
||
|
// let dataBase = {};
|
||
|
// appLanguageFun();
|
||
|
// /**
|
||
|
// * 国际化方法
|
||
|
// */
|
||
|
// function appLanguageFun() {
|
||
|
// let type = app.getLanguageLocalStorage();
|
||
|
// let dataTextArray = document.querySelectorAll("[data-text]");
|
||
|
// require(['../../js/language/' + type], function(data) {
|
||
|
// dataTextArray.forEach(dom => {
|
||
|
// let value = dom.getAttribute("data-text");
|
||
|
// dom.innerText = data[value];
|
||
|
// })
|
||
|
// dataBase = data;
|
||
|
// })
|
||
|
// }
|
||
|
</script>
|