最新赞助活动温馨提示:自愿赞助服务器费用,学生和没有工作的整站资源免费下载!
头像

HTML5 canvas实现移动端上传头像拖拽裁剪效果_html5教程技巧-H5教程

来源:http://erdangjiade.com/topic/133691.html H5程序员 2017-10-26 09:09浏览(77)

本示例使用HTML5 canvas,简单的编写了上传头像的裁剪效果,移动端支持拖拽后裁剪, 虽然样式不好看,但是功能还算全:

下图为裁剪后的效果:

html部分:

XML/HTML Code复制内容到剪贴板

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>上传头像</title>
  6. <meta name="renderer" content="webkit">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. </head>
  9. <body>
  10. <p id="imgCrop" style="width:200px;height:200px;border:1px solid #ccc;overflow:hidden;">
  11. <img src="img/test.jpg" alt="">
  12. </p>
  13. <input type="file" accept="image/*" />
  14. <button id="save">保存</button>
  15. <p>下面为剪切的图片:</p>
  16. <p id="imgShow"></p>
  17. </body>
  18. </html>

JavaScript部分:

JavaScript Code复制内容到剪贴板

  1. var $imgCrop = $("#imgCrop");
  2. var $img = $imgCrop.find("img");
  3. var img = $img[0];
  4. var width = parseInt($imgCrop.css("width"));
  5. var height = parseInt($imgCrop.css("height"));
  6. var startX,startY,scale = 1;
  7. var x = 0,y = 0;
  8. $("input").on("change",function(){
  9. var fr = new FileReader();
  10. var file = this.files[0]
  11. //console.log(file);
  12. if(!/image/w+/.test(file.type)){
  13. alert(file.name + "不是图片文件!");
  14. return;
  15. }
  16. console.log(file);
  17. $img.removeAttr("height width");
  18. fr.readAsDataURL(file);
  19. fr.onload = function(){
  20. img.src = fr.result;
  21. var widthInit = img.width;
  22. if(img.width>img.height){
  23. img.height = height;
  24. x = (width - img.width)/2;
  25. y = 0;
  26. }else{
  27. img.width = width;
  28. x = 0;
  29. y = (height - img.height)/2;
  30. }
  31. scale = widthInit/img.width;
  32. move($img, x, y);
  33. };
  34. });
  35. img.addEventListener("touchstart",function(e){
  36. startX = e.targetTouches[0].pageX;
  37. startY = e.targetTouches[0].pageY;
  38. return;
  39. });
  40. img.addEventListener("touchmove",function(e){
  41. e.preventDefault();
  42. e.stopPropagation();
  43. var changeX = e.changedTouches[0].pageX - startX + x;
  44. var changeY = e.changedTouches[0].pageY - startY + y;
  45. move($(this), changeX, changeY);
  46. return;
  47. });
  48. img.addEventListener("touchend",function(e){
  49. var changeX = e.changedTouches[0].pageX - startX + x;
  50. var changeY = e.changedTouches[0].pageY - startY + y;
  51. x = x + e.changedTouches[0].pageX - startX;
  52. y = y + e.changedTouches[0].pageY - startY;
  53. move($(this), changeX, changeY);
  54. return;
  55. });
  56. //确定目标图片的样式
  57. function move(ele, x, y){
  58. ele.css({
  59. '-webkit-transform' : 'translate3d(' + x + 'px, ' + y + 'px, 0)',
  60. 'transform' : 'translate3d(' + x + 'px, ' + y + 'px, 0)'
  61. });
  62. }
  63. $("#save").on("click",function(){
  64. var url = imageData($img);
  65. console.log(url);
  66. $("#imgShow").html("<img src="+url+" />");;
  67. });
  68. //裁剪图片
  69. function imageData($img) {
  70. var canvas = document.createElement('canvas');
  71. var ctx = canvas.getContext('2d');
  72. canvas.width = width ;
  73. canvas.height = height;
  74. ctx.drawImage(img, -x*scale, -y*scale, width*scale, height*scale, 0, 0, width, height);
  75. return canvas.toDataURL();
  76. }

以上就是本文的全部内容,希望对大家的学习有所帮助。

原文:http://www.cnblogs.com/yifengBlog/p/5265598.html

评论0
头像

友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群

1 2