Nessuna descrizione

picture-upload.html 8.9KB

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title>头像上传</title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <link href="../css/mui.min.css" rel="stylesheet" /> <style type="text/css"> *{margin:0;padding: 0;} body,html{background-color:#000;position:relative;width:100%;height:100%;overflow: hidden;} .canvas_img,.canvas,.canvas_div,.canvas_btn,.canvas_bg{position: absolute;} .canvas_div,.canvas_bg{left:0;top:0;bottom:0;right:0;} .canvas_img{z-index:1;width:100%; top:0;} .canvas_bg{background-color: rgba(0,0,0,.6);z-index:2;} .canvas{left:25px ;border:1px solid #fff;top:30px;z-index:100; } .canvas_div{z-index:999;} .canvas_btn {bottom:0;left:0;right:0;height:50px;background-color: #fff;z-index:1000;} .canvas_btn a{float:left;color:#222;width:60px;line-height:50px;text-decoration: none;text-align: center;} .canvas_btn .canvas_ok{float:right;} .canvas_save:active{color:#fff;} </style> </head> <body> <input type="hidden" name="imgfh" id="imgfh" value="" /> <input type="hidden" name="img_base64" id="img_base64" value="" /> <img id="canvas_img" src="" class="canvas_img"/> <div class="canvas_bg"></div> <canvas id="canvas" class="canvas"></canvas> <div id="canvas_div" class="canvas_div"></div> <div class="canvas_btn"> <a href="javascript:void(0);" class="canvas_cancel mui-action-back">取消</a> <a href="javascript:void(0);" class="canvas_ok" id="canvas_ok">完成</a> </div> <script src="../js/public/mui.min.js"></script> <script src="../js/public/base.js"></script> <script type="text/javascript"> mui.plusReady(function(){ var img_obj = document.querySelector("#canvas_img"); var canvas_ok = document.querySelector("#canvas_ok"); var list = plus.webview.currentWebview(); var userId = plus.storage.getItem('userid'); img_obj.setAttribute("src",list.imgurl); canvas_ok.addEventListener("tap",function(){ save_img(); imgOk = document.querySelector("#img_base64").value; imgfh = document.querySelector("#imgfh").value; console.log(imgfh) mui.ajax(baseUrl + '/ajax/image/saveHead', { data: { "id": userId, "base64": imgOk, }, dataType: 'json', //数据格式类型 type: 'post', //http请求类型 timeout: 10000, success: function(data) { console.log(JSON.stringify(data)); console.log(data.success); plus.nativeUI.toast("图片上传成功", toastStyle); mui.currentWebview.close(); mui.back(); var fPage = plus.webview.getWebviewById('../html/fillinfo.html'); mui.fire(fPage, 'closePage', { id:imgfh }); }, error: function(data) { plus.nativeUI.toast("服务器链接超时", toastStyle); } }); }) }) </script> <script> //获取手机屏幕宽高 var c_w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var c_h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var can_obj = document.querySelector("#canvas"); var img_obj = document.querySelector("#canvas_img"); var div_obj = document.querySelector("#canvas_div"); var posX = 0,posY = 0;//相对坐标 var scale = 0;//记录在缩放动作执行前的 缩放值 var start_X1=0,start_Y1=0,start_X2=0,start_Y2=0; var start_sqrt =0;//开始缩放比例 var sqrt = 1; var left_x = 0,left_y = 0;//计算 偏移量 设置画布中的X,Y轴 (加偏移量) function load(){ //设置canvas 宽度(全屏显示),高度,上下居中显示 can_obj.width = c_w -50; can_obj.height = c_w -50; can_obj.style.top = (c_h - c_w - 2) / 2 + "px"; // can_obj.style.left ="25px"; //设置图片自适应大小及图片的居中显示 // autoResizeImage(c_w,c_h,img_obj); // img_obj.style.top = (c_h - img_obj.height - 2) / 2 + "px"; //img_obj.style.left = (c_w - img_obj.width) / 2 + "px"; document.querySelector("#canvas_div").addEventListener('touchstart',touch, false); document.querySelector("#canvas_div").addEventListener('touchmove',touch, false); document.querySelector("#canvas_div").addEventListener('touchend',touch, false); var ctx_img = can_obj.getContext("2d"); var ctx_X = (can_obj.width - img_obj.width) /2,ctx_Y = (can_obj.height - img_obj.height) /2; ctx_img.drawImage(img_obj,ctx_X,ctx_Y,img_obj.width,img_obj.height);//初始化 canvas 加入图片 function touch (event){ var event = event || window.event; event.preventDefault();//阻止浏览器或body 其他冒泡事件 var mv_x1 = event.changedTouches[0].clientX, mv_y1 = event.changedTouches[0].clientY;//手指坐标 var img_left = img_obj.left,img_top = img_obj.top;//图片坐标 if(event.touches.length == 1){//单指操作 if(event.type == "touchstart"){//开始移动 posX = mv_x1 - img_obj.offsetLeft; //获取img相对坐标 posY = mv_y1 - img_obj.offsetTop; }else if(event.type == "touchmove"){//移动中 var _x = mv_x1 - posX; //移动坐标 var _y = mv_y1 - posY; img_obj.style.left = _x + "px"; img_obj.style.top = _y + "px"; ctx_img.clearRect(0,0,can_obj.width,can_obj.height);//清除画布 ctx_img.drawImage(img_obj,_x + left_x/2-25,_y - parseFloat(can_obj.style.top) + left_y/2,img_obj.width * sqrt,img_obj.height * sqrt);//画布内图片移动 } }else if(event.touches.length == 2){//双指操作 if(event.type == "touchstart"){ scale = img_obj.style.Transform == undefined ? 1 : parseFloat(img_obj.style.Transform.replace(/[^0-9^\.]/g,""));//获取在手指按下瞬间的放大缩小值(scale),作用,在移动时,记录上次移动的放大缩小值 start_X1 = event.touches[0].clientX;//记录开始的坐标值,作用:在下次放大缩小后,去掉上次放大或缩小的值 start_Y1 = event.touches[0].clientY; start_X2 = event.touches[1].clientX; start_Y2 = event.touches[1].clientY; start_sqrt = Math.sqrt((start_X2 - start_X1) * (start_X2 - start_X1) + (start_Y2 - start_Y1) * (start_Y2 - start_Y1)) / 200;//获取在缩放时 当前缩放的值 }else if(event.type == "touchmove"){ var mv_x2 = event.touches[1].clientX,mv_y2 = event.touches[1].clientY; var move_sqrt = Math.sqrt((mv_x2 - mv_x1) * (mv_x2 - mv_x1) + (mv_y2 - mv_y1) * (mv_y2 - mv_y1)) / 200;//动态获取上一次缩放值(随时变更),在下次缩放时减去上一次的值,作用:防止累加之前的缩放 sqrt = move_sqrt - start_sqrt + scale;//求出缩放值 img_obj.style.webkitTransform = "scale("+ sqrt +")";//设置放大缩小 img_obj.style.Transform = "scale("+ sqrt +")"; ctx_img.clearRect(0,0,can_obj.width,can_obj.height);//清除画布 var dImg_left = parseFloat(img_obj.style.left.replace("px","")),dImg_top = parseFloat(img_obj.style.top.replace("px","")); var w = img_obj.width,h = img_obj.height,sw = w * sqrt, sh = h * sqrt; left_x = w - sw;//计算 偏移量 设置画布中的X,Y轴 (加偏移量) 注:canvas 原点放大(canvas中图片左上角坐标),css3 scale 中点放大 left_y = h - sh; ctx_img.drawImage(img_obj,dImg_left + left_x/2-25,dImg_top - parseFloat(can_obj.style.top.replace("px","")) + left_y/2,sw,sh);//画布内图片重置 } } } } window.addEventListener('load',load, false); //裁图 function save_img(){ var base64 = can_obj.toDataURL("image/jpeg",1); var subbase = base64.substring(22); document.querySelector("#img_base64").value = subbase; document.querySelector("#imgfh").value = base64; } </script> </body> </html>