好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTML5 canvas实现移动端上传头像拖拽裁剪效果

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

下图为裁剪后的效果:

ht ML 部分:

XM L/HTML Code 复制内容到剪贴板

<!DOCTY PE &nbs p; html >    < html   lang = "en" >    < head >         < meta   charset = "UTF-8" >         < t IT le > 上传头像 </ title >         < meta   n am e = "renderer"   content = " webkit " >         < meta   name = "viewport"   content = "width=device-width, initial -s cale=1.0" >    </ head >    < body >    < div   id = " img Crop"   style = "width:200px;h ei ght:200px;border:1px solid  # ccc;overflow:hidden;" >         < img   src = "img/ test . jpg "   alt = "" >    </ div >    < input   type = "file"   accept = "image/*"   />    < button   id = "save" > 保存 </ button >    < p > 下面为剪切的图片: </ p >    < div   id = "imgShow" > </ div >    </ body >    </ html >   

JavaScript部分:

JavaScript Code 复制内容到剪贴板

VAR  $imgCrop = $( "#imgCrop" );    var  $img = $imgCrop.find( "img" );    var  img = $img[0];    var  width = parseInt($imgCrop.css( "width" ));    var  height = parseInt($imgCrop.css( "height" ));    var  startX,startY,scale = 1;    var  x = 0,y = 0;    $( "input" ).on( "change" , function (){         var  fr =  new  FileReader();         var  file =  this .files[0]         //console. LOG (file);         if (!/image\/\w+/.test(file.type)){            alert(file.name +  "不是图片文件!" );             return ;        }        console.log(file);        $img.removeAttr( "height width" );        fr.readAsDataURL(file);           fr.onload =  function (){            img.src = fr.result;             var  widthInit = img.width;             if (img.width>img.height){                img.height = height;                x = (width - img.width)/2;                y = 0;            } else {                img.width = width;                x = 0;                y = (height - img.height)/2;            }            scale = widthInit/img.width;             ;m ove($img, x, y);                    };            });       img.addEventListener( "touchstart" , function (e){          startX = e.t arg etTouches[0].pageX;        startY = e.targetTouches[0].pageY;              return ;         });     img.addEventListener( "touchmove" , function (e){          e.p rev entDefault();          e.stop PR opagation();              var  changeX = e.changedTouches[0].pageX - startX + x;         var  changeY = e.changedTouches[0].pageY - startY + y;           move($( this ), changeX, changeY);         return ;            });     img.addEventListener( "touchend" , function (e){           var  changeX = e.changedTouches[0].pageX - startX + x;         var  changeY = e.changedTouches[0].pageY - startY + y;           x = x + e.changedTouches[0].pageX - startX;        y = y + e.changedTouches[0].pageY - startY;           move($( this ), changeX, changeY);         return ;            });      //确定目标图片的样式    function  move(ele, x, y){        ele.css({             '-webkit -t ransform'  :  'translate3d('  + x +  'px, '  + y +  'px, 0)' ,             'transform'  :  'translate3d('  + x +  'px, '  + y +  'px, 0)'        });    }       $( "#save" ).on( "click" , function (){         var  url = imageData($img);        console.log(url);           $( "#imgShow" ).html( "<img src=" +url+ " />" );;    });    //裁剪图片    function  imageData($img) {             var  canvas = document.createElement( 'canvas' );             var  ctx = canvas.getContext( '2d' );            canvas.width = width ;            canvas.height = height;            ctx.drawImage(img, -x*scale, -y*scale, width*scale, height*scale, 0, 0, width, height);             return  canvas.toDataURL();        }      

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

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

总结

以上是 为你收集整理的 HTML5 canvas实现移动端上传头像拖拽裁剪效果 全部内容,希望文章能够帮你解决 HTML5 canvas实现移动端上传头像拖拽裁剪效果 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于HTML5 canvas实现移动端上传头像拖拽裁剪效果的详细内容...

  阅读:17次