欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

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

程序员文章站 2022-04-26 17:17:29
...
本示例使用HTML5 canvas,简单的编写了上传头像的裁剪效果,移动端支持拖拽后裁剪, 虽然样式不好看,但是功能还算全:

下图为裁剪后的效果:

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

html部分:

XML/HTML Code复制内容到剪贴板
  1. /span>>
  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. div id="imgCrop" style="width:200px;height:200px;border:1px solid #ccc;overflow:hidden;">
  11. img src="img/test.jpg" alt="">
  12. div>
  13. input type="file" accept="image/*" />
  14. button id="save">保存button>
  15. p>下面为剪切的图片:p>
  16. div id="imgShow">div>
  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("HTML5 canvas实现移动端上传头像拖拽裁剪效果_html5教程技巧" />");;
  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