仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 893|回复: 8
打印 上一主题 下一主题

[HTML5] html5教程之HTML5实例教程:FileReader、拖拽和canvas

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:57:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
通过我们的HTML编辑器,您能够编辑HTML,然后点击按钮来查看结果。破洛洛文章简介:在如今这个各处是HTML5话题的时期,仿佛不懂点HTML5都有点后进。那我也跟上潮水一把吧,明天给人人分享的是基于HTML5的自助切图。
在如今这个各处是HTML5话题的时期,仿佛不懂点HTML5都有点后进。那我也跟上潮水一把吧,明天给人人分享的是基于HTML5的自助切图。
在组里常常会被某计划师叫切板仔,的确重构很年夜一部合作作都花在切图上,而怎样进步切图效力大概让切图自助化也是我们重构师的寻求。基于这个条件我本人抱着研讨的心态,利用HTML5大抵完成了一下。一入手下手以为HTML5是个很奥秘很深邃的器材,实在当你往懂得他,你会发明他是很充实,且很简单上…………….手的。
这里利用到的HTML5手艺包含:

  • 当地预览(FileReader)
  • 拖拽(drag&drop)
  • 切图(canvas)
拖拽:

拖拽基础事务以下:
DataTransfer工具退拽工具用来传送的前言,利用通常是Event.dataTransfer。draggable属性就是标签元素要设置draggable=true,不然不会无效果,比方:<divtitle=”拖拽我”draggable=”true”&rt;列表1</div:rt;</td&rt;ondragstart事务当拖拽元素入手下手被拖拽的时分触发的事务,此事务感化在被拖曳元素上ondragenter事务当拖曳元素进进方针元素的时分触发的事务,此事务感化在方针元素上ondragover事务拖拽元素在方针元素上挪动的时分触发的事务,此事务感化在方针元素上ondrop事务被拖拽的元素在方针元素上同时鼠标摊开触发的事务,此事务感化在方针元素上ondragend事务当拖拽完成后触发的事务,此事务感化在被拖曳元素上drageleave事务当拖拽分开此处时触发,只在分开这个工具时触发一次,此事务感化在方针元素上Event.preventDefault()办法制止默许的些事务办法等实行。在ondragover中必定要实行preventDefault(),不然ondrop事务不会被触发。别的,假如是从其他使用软件或是文件中拖器材出去,特别是图片的时分,默许的举措是显现这个图片或是相干信息,并非真的实行drop。此时必要用用document的ondragover事务把它间接干失落。Event.effectAllowed属性就是拖拽的效果。
是页面上所利用到拖拽的中央。左图为拖拽上传图片,右图为拖拽参考线。
先容完拖拽基础事务后,再来看下页面是怎样经由过程拖拽将当地图片经由过程拖拽的体例拖到页面指定地区利用图片上传,这也是拖拽如今对照经常使用到的功效。
给document增添拖拽事务,当拖拽元素进进页面时改动方针元素款式提醒用户方针元素地位,当拖拽元素分开页面后复原款式。代码以下:
  1. document.ondragleave=function(e){e.preventDefault();varel=document.getElementById(target_box);el.className=el.className.replace(/over/g,);}document.ondrop=function(e){e.preventDefault();}document.ondragenter=function(e){e.preventDefault();varel=document.getElementById(target_box);el.className=el.className+over;}document.ondragover=function(e){e.preventDefault();varel=document.getElementById(target_box);el.className=el.className+over;}
复制代码
当图片被拖到上传地区后经由过程FileReader办法读取当地文件,然后将图片经由过程canvas来绘制,假如图片的宽度是年夜于画布1000px将程度居中处置,这里由于切图的时分必要将图片完全切出来,以是在设置canvas宽度时必要显现成图片的巨细,以是这里利用了负marginLeft(这里将图片宽度减1000得出超越1000的地区,然后再除于2得出marginLeft的值)表面套一层1000px的体例来完成程度居中。代码以下:
  1. varbox=document.getElementById(target_box);box.ondrop=function(e){e.preventDefault();//猎取文件列表varfileList=e.dataTransfer.files;varreader=newFileReader();reader.onload=function(e){varimg=newImage();img.src=this.result;img.onload=function(){if(this.width>1000){canvas.style.marginLeft=((this.width-1000)/2)*-1+px;}canvas.width=this.width;canvas.height=this.height;ctx.drawImage(this,0,0);}}reader.readAsDataURL(fileList[0]);document.getElementById(target_box).style.display=none;document.getElementById(doc).style.display=display;};
复制代码
当地预览(FileReader)

FileReader接口的办法readAsBinaryString(file)将文件读取二进制码
一般我们将它传送到后端,后端能够经由过程这段字符串存储文件readAsText(file,[encoding])将文件读取文本
第二个参数是文本的编码体例,默许UTF-8readAsDataURL(file)将文件读取为DataURL
将文件读取为一串DataURL字符串,将小文件以一种特别格局的URL地点间接读进页面。小文件指图象与html等格局的文件。FileReader接口的事务onabort数据读取中止时触发onerror数据读掏出错时触发onloadstart数据读取入手下手时触发onprocess数据读取中onload数据读取乐成完成时触发onloadend数据读取完成时触发,不管乐成失利这里由于标尺不必要做任何事变处置只必要拖拽效果,以是只必要增添draggable属性就能够,代码以下:

然后给方针元素增添Drop事务,当拖拽的标尺在方针元素上摊开时新建一个参考线并经由过程offsetY来猎取鼠标开释时的Y坐标,然后再将这个Y坐标存到数组里。
  1. //增添标尺方针事务document.getElementById(cvs).ondrop=function(ev){vardiv=document.createElement(div);div.style.width=100%div.style.height=1px;div.style.background=#4affff;div.style.position=absolutediv.style.top=ev.offsetY+18+px;document.getElementById(screen).appendChild(div);rulerTop.push(ev.offsetY);returnfalse;}
复制代码
Canvas:

这里先先容下canvas的drawImage办法,切图的中心办法就是这个,我们先来看看官方给出的利用办法与注释:
  1. drawImage(image,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight)
复制代码
image所要绘制的图象。这必需是暗示<imgalt=""/>标志大概屏幕外图象的Image工具,大概是Canvas元素。sourceX,sourceY图象将要被绘制的地区的左上角。这些整数参数用图象像从来器度。sourceWidth,sourceHeight图象所要绘制地区的巨细,用图象像素暗示。destX,destY所要绘制的图象地区的左上角的画布坐标。destWidth,destHeight图象地区所要绘制的画布巨细。懂得了drawImage办法后我们来看下,怎样经由过程drawImage到达切图效果,实在这里的切图,只是经由过程drawImage加上高宽和偏移量来完成所谓的切图效果,代码以下:
  1. //绘制图片functionscaleCanvas(canvas,width,height,destX,destY){varw=canvas.width,h=canvas.height;varcutCanvas=document.createElement(canvas);varcutCtx=cutCanvas.getContext(2d);cutCanvas.width=width;cutCanvas.height=height;cutCtx.drawImage(canvas,0,0,w,h,destX,destY,w,h);returncutCanvas;}//猎取图片URLfunctiongetDataURL(canvas,width,height,destX,destY){canvas=scaleCanvas(canvas,width,height,destX,destY);returncanvas.toDataURL(image/jpeg);}//将conver转成IMG格局varconvertToImage=function(canvas,width,height,destX,destY){varstrData=getDataURL(canvas,width,height,destX,destY);returnencodeURIComponent(strData);}
复制代码
这里先说下大抵完成的道理,起首先创立一个新的canvas然后设置好宽高,而这个宽高就是参考线分开的每块宽高,然后过通drawImage将原始图片上某块局域复制一份出来,再经由过程toDataURL转成base64编码便利当地显现。
地点在这个Demo中image就是我们刚上传的谁人图片,sourceX、sourceY和destWidth、destHeight取图片的原始高宽,而我们要复制的局域也是重新的canvas上的左上角入手下手,以是这里的sourceX、sourceY为0,0。这里最次要的就是destX、destY,就是他们来把持复制局域的肇端坐标,由于新图片是必要从最右边入手下手复制,以是destX为0,而destY将依据参考线的纵坐标来定值。
这里要注重一下,由于域的成绩,以是假如页面不是放到服务器上运转而是当地运转的话会呈现权限报错情形
最初附上Demo一枚,接待人人恣意的暴、用力暴。(Demo只撑持chrome扫瞄器,其他扫瞄器会有不良反响,请包涵)
好了,全部HTML5自助化切图的次要代码就这些,这里第一次实验用HTML5往做一些实其实在的器材,大概代码并非最优,还能持续优化,人人假如关于文章有甚么倡议或不分明的中央接待会商。
在旧版的切图工具里,我们的做法是将图片上传到服务器,然后经由过程服务器端把图片切好后把对应的地点前往,前端再把页面显现出来。如许的做法会招致在收集慢时呈现长工夫的守候,而假如页面保持这里的操纵,还必要将图片从服务器端删撤除。在拖拽参考线时也只能经由过程大批的代码往完成,还必要编写一些服务器端代码。
HTML5版绝对有呼应速率快(当地读取)、拖拽功效复杂、前端切图不必要依附服务器,削减开辟本钱。
归正HTML5是个下流、好玩、风趣、复杂的好器材,值得你平生具有。
写完文章已清晨两点半,依据官方和非官方统计,这个工夫段被坑机率是平常的0.000001%,理论是查验真谛的独一尺度。而为了查验这个尺度我带着怠倦的身躯,翻开客户端进进婚配形式。
裸多兰一级升E下路伶仃神级年夜嘴再次上路,德玛西亚。。。
</p>
使用HTML5也是断断续续的有些历史了,但是没有系统的总结过,最近发现公司的图书馆有不少藏书,
精灵巫婆 该用户已被删除
9#
发表于 2015-3-20 12:25:20 | 只看该作者
还是在Dreamweaver所见即所得添加链接是,可以选中文字或图片然后按下shift键不放鼠标拖出箭头直接指向文件即可。这是比较简单的也是常用的方之一。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-13 04:00:16 | 只看该作者
由CS4 版本开始,则转用WebKit 排版引擎(亦即Google Chrome和Apple Safari浏览器所用的排版引擎)作为网页预览。
爱飞 该用户已被删除
7#
发表于 2015-3-6 14:59:22 | 只看该作者
使用内容管理系统进行开发并实现快速、精确的浏览器兼容性测试。
柔情似水 该用户已被删除
6#
发表于 2015-2-19 09:51:53 | 只看该作者
Adobe Dreamweaver(前称Macromedia Dreamweaver)是Adobe公司的著名网站开发工具。
变相怪杰 该用户已被删除
5#
发表于 2015-2-7 01:11:34 | 只看该作者
在Dreamweaver里可以很轻松的完成图文混排、插入图片、插入Flash、插入音频、插入视频。
第二个灵魂 该用户已被删除
地板
发表于 2015-1-31 20:06:22 | 只看该作者
Adobe Dreamweaver(前称Macromedia Dreamweaver)是Adobe公司的著名网站开发工具。
分手快乐 该用户已被删除
板凳
发表于 2015-1-23 18:42:18 | 只看该作者
以上大概就是文字图片的一些链接方法,通过学习Dreamweaver、练习让我对dreameaver8有了进一步的认识,他其实是一款很好的建立Web站点和应用程序的软件。它将可视布局工具、应用程序开发功能和代码编辑支持组合在一起,其功能强大,使得各个层次的开发人员和设计人员都能够快速创建界面吸引人的基于标准的网站和应用程序。
若天明 该用户已被删除
沙发
发表于 2015-1-17 19:54:12 | 只看该作者
技术的学习如同长跑。只要越过极限,就会越跑越轻松。技术的学习其实并不像想象中那么可怕,任何技术都并不高深莫测。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表