云顶娱乐-云顶娱乐游戏平台官网
做最好的网站
当前位置: 云顶娱乐 > 云顶娱乐 > 正文

h5开拓有关内容总括,更改游戏的二十个HTML5网址

时间:2019-10-08 20:35来源:云顶娱乐
2. Move the Web Forward Move the Web Forward是由MatMarquis, AaronForsander, ConnorMontgomery, Paul Irish,DivyaManian, NicolasGallagher, AddyOsmani和有些朋友一同编写的,它报告大家“怎么着依照本人的优异塑造二

图片 12. Move the Web Forward

Move the Web Forward是由Mat Marquis, Aaron Forsander, Connor Montgomery, Paul Irish,Divya Manian, Nicolas Gallagher, Addy Osmani和有些朋友一同编写的,它报告大家“怎么着依照本人的优异塑造二个受人尊敬的人的web”。 里面列举了各类你可见用来优化web的不二等秘书籍。

网址陈列了HTML5代码,使用data-* 属性能够完毕推文(Tweet)中的hashtag寻觅成效。里面还恐怕有一部分有助于阅读只是并未实际意义的表明:

图片 2<!DOCTYPE html``是一个重要的位,可以触发标准模式。)不问可见,全数的那么些能源都诣在扶助开垦者创设越发可观的HTML5网址,Move the Web Forward中的音信是十分实用的。Beyond the Blue Beanie?, Stephanie (Sullivan) Rewis评说说:“俗话说得好,人多势众。有像这种类型多少人涉足,必然能够推向web急迅上扬。以后大家应该团结起来,让web的风潮来得更霸气些!”在Addy Osmani的The Smashing Guide To Moving The Web Forward中有更加的多相关消息。

难点消除办法:

品味阻止事件的冒泡,看能够缓慢解决难点?
那大家品尝在触发子成分的click的时候,尝试协会子成分的冒泡,看是不是消除本身的难点?加多如下的代码:

JavaScript

$('[node-type=jsbridge]').bind('click',function(e){ // console.log(e.type); e.stopPropagation(); });

1
2
3
4
$('[node-type=jsbridge]').bind('click',function(e){
      // console.log(e.type);
       e.stopPropagation();
});

经过自家的测量试验,代码是能够符合规律的运作的。

那正是说大家有未有更加好的章程来化解地点的标题吧?请看接下去的始末

下一代网页:当HTML5代替Flash

2011/11/29 · HTML5 · HTML5

Flash 投降了。

我们说的是在移动互连网络。Flash 的专利持有者 Adobe 集团——没有错,便是那家发明了盛名的 PhotoShop 软件的公司,在前一周发布了三个新闻:遗弃在三弟大等移动道具上对 Flash 的扶助,公司将不会再对此投入任何财富。

十多年来,Flash 一向是网页在体现多媒体内容时的标准格式,它也是 Adobe 集团除 PhotoShop 等产品以外最关键的赢利花招之一。Flash 动画曾经风靡一时,用 Flash 制作的网络广告到现在还随处可知。还应该有上传到 Youtube 的这多个录像,在早先时代绝大好些个都以 Flash 格式。

那项本领的兴源点自一九八七年份中早先时期的浏览器大战。那时,网景和微软都凭借各自的浏览器争夺市集,但可以的竞争却变成互连网内容发表商碰到了差异浏览器间的包容难点:为了超过对手,网景和微软都在大团结的浏览器中整合了专有技巧,“扩大”原有的技能规范,以便让网站在极端客商前边浮现存所差异。结 果变成了逐个浏览器中的效果区别,给网址开荒者和客户带来了井底之蛙。

一家名字为 Macromedia 的厂商开掘了这么的火候,开辟了 Flash,后来它们被 Adobe 所收购。Flash 从降生之日起,就以一个统一建设方案的样子出现,被遍布应用到了网页和网络多媒体的塑造上,使网页变得丰富多彩,不再只是单调的例外粗细、分歧尺寸的文字 恐怕图片,而且及时鲜有能与 Flash 匹敌的同类本领。

但能力的洪流总是滚滚向前的。十多年过去了,这几天当移动道具也产生上网和游戏的主流设备时,Flash 的难题就变得特别严重。比方它太耗能了,而手提式有线电话机和机械Computer最入眼的就是十足的电力续航时间,别的,Flash 还有恐怕会占用太多难得的移动设备内存能源。但不论技艺上照旧商业战略上,Adobe 都不会积极改换这种局面,究竟没有哪家商号愿意打破自个儿稳赚不赔的商业情势。

那多少个急需在运动网络时期争夺话语权的大集团们—苹果、Google和微软,就不这样想了。2008年3月起,随着 华为平板 的出产,苹果率先发表了 Flash 在运动设备上的死刑,转而协助新的网页格式;紧随其后的是 谷歌和微软:Chrome 浏览器周详转向新的网页格式,乃至刻意推出利用新技术的网页程序商铺;在微软下一代操作系统的浏览器分界面中,也不会再支撑那几个急需设置特定插件能力运作的 本事,包含 Flash。

他俩新的帮衬对象共同指向了 HTML5。现在,随着 Adobe 在移动设备上对 Flash 的积极遗弃—以致连 Adobe 本身都推出了依靠 HTML5 的开拓工具“Edge”,HTML5离成为现在网页新标准的那一天也就愈加近了。

贰个很直观的分解是,HTML5正是网页通用技巧规范 HTML 的第五版,与上一代 HTML 相比,它为开辟者们提供了贰个完好无缺平台,无需依靠任何插件。除了最基础的音频和录制以外,它还援救越来越多互动成效,以及二十八线程管理等全新特征。正是那个特 征,使在网页上达成大型程序的日常的繁杂效果成为了说不定。它不但有益于开采,也可能有利维护。在大哥大等移动器械上,它也显现得比 Flash 更快捷、更节省电力。已逝世的苹果公司元老Jobs就曾提到,用 Flash 阅览录制的耗能量大约是用 HTML5 观察摄像的两倍。

开拓者对 HTML5 能够跨平台支付的帮助和益处也极为追捧,那意味着她们得以采纳这一本事为各样智能手提式有线话机、平板计算机和 PC 开垦完全相称的产品,不用非常针对一定硬件或在线公司进行修改。无论是苹果 iOS、Google Android 照旧微软 Windows Phone,以致是没落的小米手提式有线电话机操作系统也不要紧,客户一旦张开浏览器就会动用程序。那使得开采者们方可在最大面积内推广自个儿的成品。

百纳新闻公司 CTO 刘铁锋以致告诉《第一金融周刊》,从技艺上看 HTML5 已经具有了代表 Flash 的力量,在3D 图形的绘图上仍是能够做得更加好。百纳音讯公司是 HTML5 才干的意志维护者,它今后最知名的成品是海豚浏览器。

听大人讲追踪互连网本领的科学和技术博客 binvisions.com 的总计,二〇一二年第三季度最受接待的九拾陆个网址中,有34%采用了 HTML5。技艺岗位网址 Dice.com 称,二零一五年第一季度至第三季度,人事CEO对 HTML5 技能人才的简历找出量翻了一番多。

活动广告集团 InMobi Mobile Insights 副首席营业官詹姆士·兰Bertie(詹姆士兰Berti)表露,二〇一一年九月,U.S.利用 HTML5 技艺制作广告的重型广告商数量一度从八月时的62家扩张至250家。

看起来 HTML5 的大潮有一点点势不可挡,可是有人提示大家理应告一段落了,因为更令人愕然的是,曾几何时能够周详拥抱雅观的 HTML5 网页呢?

话题又回到了那个大商铺身上。实际上 Adobe 集团平昔在抱怨,苹果、Google和微软据此安排远隔Flash,越多的是出于商业立场实际不是技艺难点。从那些大厂商中间转播 HTML5 的数见不鲜的遐思上看,那多少也可以有个别道理。

苹果在协助 HTML5 一事上直接持有保留。比方在为 Samsung 开辟基于 HTML5 的行使时,开辟者们近年来还不也许调用录像头、陀螺仪等职能,而独有在支付 App 版本时技能获得完整帮助。那是因为 AppStore 一贯是苹果商业形式中不能缺少的一环,而 HTML5 却慰勉在网页上直接付出使用。

2012年2月,老品牌大不列颠及北爱尔兰联合王国金融媒体《金融时报》由于不满 AppStore 中的新宗旨,撤下了和煦的付费使用,改由网页举办推广。八个月今后,网页顾客端 FT.co 累计达到了20万的下载量,何况在那之中有15%的付开支户。就算那并非多个左近的例子,它暂且也还平昔不要挟到苹果,可是苹果并不期待那样的例证愈来愈多。

在 谷歌(Google),景况也很复杂。这家市廛的移动战术还有个别模糊,除了用于台式机的 Chrome 操作系统之外,还应该有炙手可热的手提式无线电话机操作系统 Android。前面叁个的采纳信赖网页,Google乃至为此推出了不安装别的软件、唯有贰个浏览器的 Chrome 上网本,但前面一个则更就好像苹果方式,视 App 为主流。因而,即使 Google已经宣布协助 HTML5,但也愿意将它的升高完全放入本身的准绳中。

关于微软,尽管在 IE9 和 IE10 浏览器中,都有的插手了对 HTML5 的援助,但这家商铺也可能有布署对 SliverLight 进行放大,这是微软团结的新颖网页开辟本事。借使周到协理HTML5,那么以往将会回落 SilverLight 的市镇分占的额数。

这么些大商铺各怀鬼胎,对 HTML5 的支撑程度也休想达到任何,因而由多家厂家结合的 HTML5 阵营,现今从没形成统一标准。仅以对录像的支撑为例,一方是支撑H.264编码格式的苹果,另一方则是永葆 WebM 的 谷歌(Google) 和浏览器集团Firefox、Opera,微软则索性当起了墙头草。这种技能阵营分散、对开辟者的支撑不足的范畴,导致大好些个HTML5 应用遇到运营速度过慢、体验倒霉等样样难点。

前些天更为多的开垦者正在品尝将 App、普通网页和 HTML5 同期融合到成品中,那大致正是应对以后方向的最安全的法子。在火爆应用“航班管家”里,关键的机票查询和航班动态功用平昔在 App 上落到实处,地图和酒店查询则采纳了内嵌的家常 web 网页,而依照他们的流行安顿,今后的社区服务将会使用 HTML5 才具进行开辟。这种有时将 HTML5“打包”进 App,为跨平台和更丰富的法力做策画的艺术,已经被过多的开采者选择。

聊到底何人也不愿错失能够让网页变得更为助长,何况能够跨平台开垦的 HTML5。除了 Adobe 的能动投降以外,他们还迎来了叁个更加强有力的Sanmig军—推文(Tweet)。5月9日,推文(Tweet)公布收购 HTML5 程序分销平台湾商人家 Strobe。它还在一月份恰好推出了 华为平板客商端软件,帮忙 HTML5 网页开垦技巧。

让大家把目光再度转到公斤年前,当微软的比尔·盖茨见到网景浏览器轻巧占有五分四的客商桌面之后,全力驱动集团投入了 IE 浏览器的开辟,这一表决使微软借助操作系统和浏览器统治了 PC 市镇。到前几日,浏览器公司们一致雄心壮志,希望把各样程序—满含操作系统直接搬到网页上来使用,而 HTML5 成为了它们最要紧的筹码。

历史总是那样,不可制止的出现轮回。未来,又到了新一代粉墨登台的年月。

赞 收藏 评论

图片 3

十一个运动应用开垦的HTML5框架和采取

2011/11/14 · HTML5 · 来源: skytechgeek     · HTML5

在过去的三年里,触屏设备快速增进。iOS 和 Android 设备让开垦者和设计员发轫再一次思索他们的Web应用,以提供更加好的触屏体验。

相持于本地利用,移动Web应用有数不尽优势,但也可以有数不尽规划和支出上的挑衅。这里列出了一层层有效的框架来帮助基于 HTML 的 Web应用开垦。它们帮忙大多数风行的智能手提式有线电话机和机械计算机。

1. Lungo.js:HTML5 移动支付框架

图片 4

Lungo.js 是第二个利用 HTML5 和 CSS3 个性的活动支付框架。它能够帮助开采者创设 iOS,Android,Blackberry 和 WebOS 平台的利用。

Lungo.js 不需求任何 web 服务器的辅助就能够帮助客商完毕 HTML5 的机能,比方WebSQL, 吉优location,History,Device orientation 等等。

2. JO:一个大概的 HTML5 App 框架

图片 5

JO 能够帮忙你创建类似本地使用的 Web App。JO 是一个开源的免费框架,能够和 PhoneGap 一齐使用。

3. Joshfire:跨设备的付出框架

图片 6

Joshfire 是一个开源的跨设备支出框架,帮助开采者创立能够在多样设施上运维的 web app。它使用 HTML5 和 JavaScript,并且同意开拓者急速组合本地利用和一定的 web 应用。

Joshfire 能够让您的运用接受键盘,鼠标,触摸屏,遥控器等装置的输入。Joshfire 援助Node.JS。

4. Sencha Touch:基于 HTML5 的移位网页开辟框架

图片 7

Sencha touch 能够让开荒者成立类似本地利用体验的 web app。Shencha 是率先个应用 HTML5,CSS 和 JavaScript 何况援助音频/录制,本地存款和储蓄,圆角,渐变背景以及阴影的支付框架。

5. Baker:HTML5 电子书框架

图片 8

Baker 是用来在 华为平板 可能 金立 平台上公布交互式的电子书大概电子杂志的 HTML5 电子书框架。.

6. Touchy Boilerplate

图片 9

Touchy Boilerplate 是多少个用来创立移动 web app,包括 HTML 模板,Meta tag 等的工具。Touchy 能够协助动态页面导航,固定页头,滚动内容,浏览历史记录等作用。Touchy 使用 jQuery 只怕 Zepto.JS。

7. Ripple:让运动支付测量试验更便于

图片 10

在差异的平台上测验活动使用是一件令人高烧的事情。Ripple 能够辅助你在不一致的平台湾商人测量检验并且调节和测量试验你的 HTML5 移动使用。Ripple 是叁个chrome 的恢宏。它能够上行下效各种设备的详细音信,比如user_Agent,Geolocation 等等。

8. RestKit

图片 11

Restkit 是一个 objective-c的开支框架,目标是简化并加速与 Restful 的 web service 交互。它提供了二个简洁的 HTTP request/response API 和三个强有力的靶子映射系统。

9. HTML5 包容性表格

图片 12

Mobile HTML5 是叁个表格,突显了不一致器材/平台对 HTML5 性情的支撑情状。包含 Safari, Android, Blackberry, IE,Opera,Firefox,webOS 和 Symbian。

10. MobileESP:检查实验你的移位网页访谈者

图片 13

MobileESP 项目提供了一套轻易、轻量级的 API 让网址的开辟者检验访客是或不是利用移动设备,恐怕选拔的是哪一类运动器具。

11.Tiggr

图片 14

Tiggr 是二个运动三个用创设工具,能够让您快速创制移动使用。你无需写代码就会创设丰盛的运动应用。

英语原来的作品:

 

赞 2 收藏 评论

图片 15

图像旋转的落到实处

图片 16
上图所示“气泡”,宽为 160,高为 192,x 轴方向距离原点 512,y 轴方向距离原点 220,逆时针旋转 35 度。
要绘制该“气泡”,需求先将坐标系平移(translate),再旋转(rotate)。具体贯彻步骤如下:
图片 17

save() 方法与 restore() 方法:

  1. save() 方法用来保存 Canvas 状态的,没有参数。每一趟调用 save() 方法,当前的情况就能够被推入栈中保存起来。当前情形包涵:
    • 当下使用的变形(移动/旋转/缩放)
    • strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation 的值
    • 此时此刻的裁切路线(clipping path)
  2. restore() 方法用来回复 Canvas 状态,未有参数。每二回调用 restore() 方法,上三个保存的图景就从栈中弹出,全数设定都复苏。
  3. 动静保存在栈中,能够嵌套使用 save() 与 restore()。

图片 1818. ROME “3 Dreams of Black”

ROME “3 Dreams of Black”是克莉丝Milk和相爱的人共同付出的叁个音乐录音带交互网址,里面有Danger Mouse,丹尼尔勒le Luppi和Norah Jones的音乐。

图片 19再有记录电影幕后手艺的示范和录制也是拒绝错失的。

Dev.Opera的“An introduction to WebGL”(以及“Porting 3D graphics to the web”,都是由Luz Caballero编排的)中有越多关于WebGL的介绍,里面还应该有非常多佳绩的身体力行。Opera还希图公布一个越发完美的WebGL教程,而且将在面世。

标题发生的场景

先看一段html 代码:

XHTML

<div class="qr-btn" node-type="qr-btn">扫描二维码1 <input node-type="jsbridge" type="file" name="myPhoto" value="扫描二维码1" /> </div>

1
2
3
<div class="qr-btn" node-type="qr-btn">扫描二维码1
            <input node-type="jsbridge" type="file" name="myPhoto" value="扫描二维码1" />
</div>

事先本人的主见是那个样子的:
1.笔者先触发qr-btn的 click 事件,在回调中触发 input 的click 事件click 事件
2.然后触发input 的 change 事件,获取上传图片的音讯。

遵照自个儿的笔触代码应该是底下的那么些样子的

JavaScript

//点击父级成分的平地风波 $('.qr-btn').bind('click',function(){ //触发子成分的风浪 $('[node-type=jsbridge]').trigger("click"); }); $('[node-type=jsbridge]').bind('change',function(){ //做一些作业 });

1
2
3
4
5
6
7
8
//点击父级元素的事件
    $('.qr-btn').bind('click',function(){
        //触发子元素的事件
        $('[node-type=jsbridge]').trigger("click");
    });
    $('[node-type=jsbridge]').bind('change',function(){
        //做一些事情
    });

下面的代码,依据常规的笔触应当是绝非难题的,不过,在其实的运维进程中却发生了难题。浏览器的报错音信如下:

图片 20
这是因为货仓溢出的难题。那么为啥会油然则生那样的主题素材吧?小编把断点打在了以下的职责,然后点击子元素

图片 21

发生的动静是:代码无限次的接触$('.qr-btn').bind(...) ,就应时而生了地点的报错消息。那么是何等来头导致的吗?
想想一下发觉:是因为事件冒泡的难点。作者单击父成分触发子成分的clickh5开拓有关内容总括,更改游戏的二十个HTML5网址。 事件,子成分的 click 事件又冒泡到父元素上,触发父成分的 click 事件,然后父成分再度接触了子元素的 click 事件,这就形成了平地风波的大循环

图像翻转的落成

图片 22
上海体育地方所示“气泡”,宽为 160,高为 192,x 轴方向距离原点 172,y 轴方向距离原点 365,顺时针旋转 35 度。
要绘制该“气泡”,必要先将坐标种类活动(translate),翻转(scale),平移(translate),再旋转(rotate)。具体贯彻步骤如下:
图片 23
迄今甘休,完结了“气泡”的镜像翻转,但反过来后的“气泡”还要求旋转特定的角度,在情势一的基础上再三再四对坐标体系进行转移:
图片 24
上述操作中张开了一次活动(translate)操作,能够打开合并简化:
图片 25

13. Rally Interactive

Rally Interactive网址选用canvas开辟了一些可怜有创新意识的事物,它使用canvas落成网址的互动功效。选中网页中的三角形后图形会做出反应,当点击它之后,也会油但是生动画,在此以前达成那些动画片大概供给投入类似Flash这类的插件。

正如Wes Pearce所说的“若无HTML5 canvas,大家的网址根本就不容许达成大家想要的作用。最新的浏览器差不离都帮衬canvas。我们还充裕利用了最新的History API,它的实现意料之外的全速。”

关于小编:zhiqiang21

图片 26

做以为对的作业,假设大概是错的,那就做以为本人承受得起的业务! 个人主页 · 笔者的稿子 · 11 ·      

图片 27

小结

现今,作者的数学姿势又复苏到了高等高校统招考试水平。

  1. 图像旋转:
    • 基本功转变法:
    JavaScript

    ctx.save() ctx.translate(x + width / 2, y + height / 2)
    ctx.rotate(angle * Math.PI / 180) ctx.drawImage(img, -width /
    2, -height / 2, width, height) ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c32686a931313088-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32686a931313088-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32686a931313088-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32686a931313088-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32686a931313088-5">
    5
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c32686a931313088-1" class="crayon-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c32686a931313088-2" class="crayon-line crayon-striped-line">
    ctx.translate(x + width / 2,  y + height / 2)
    </div>
    <div id="crayon-5b8f33c32686a931313088-3" class="crayon-line">
    ctx.rotate(angle * Math.PI / 180)
    </div>
    <div id="crayon-5b8f33c32686a931313088-4" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, -width / 2,  -height / 2, width, height)
    </div>
    <div id="crayon-5b8f33c32686a931313088-5" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>

-   矩阵变换法:  


    JavaScript

    ctx.save() var rad = angle * Math.PI/180 ctx.transform(
    Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x +
    width / 2, y + height / 2) ctx.drawImage(img, -width / 2,
    -height / 2, width, height) ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c32686d570876064-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32686d570876064-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32686d570876064-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32686d570876064-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32686d570876064-5">
    5
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c32686d570876064-1" class="crayon-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c32686d570876064-2" class="crayon-line crayon-striped-line">
    var rad = angle * Math.PI/180
    </div>
    <div id="crayon-5b8f33c32686d570876064-3" class="crayon-line">
    ctx.transform( Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x + width / 2,  y + height / 2)
    </div>
    <div id="crayon-5b8f33c32686d570876064-4" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, -width / 2,  -height / 2, width, height)
    </div>
    <div id="crayon-5b8f33c32686d570876064-5" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
  1. 图像翻转:
    • 基础转变法:
    JavaScript

    // 方法一 ctx.save() ctx.translate(canvasWidth, 0) ctx.scale(-1,
    1) ctx.drawImage(img, canvasWidth-width-x, y, width, height)
    ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c326870431697867-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326870431697867-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326870431697867-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326870431697867-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326870431697867-5">
    5
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326870431697867-6">
    6
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c326870431697867-1" class="crayon-line">
    // 方法一
    </div>
    <div id="crayon-5b8f33c326870431697867-2" class="crayon-line crayon-striped-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c326870431697867-3" class="crayon-line">
    ctx.translate(canvasWidth, 0)
    </div>
    <div id="crayon-5b8f33c326870431697867-4" class="crayon-line crayon-striped-line">
    ctx.scale(-1, 1)
    </div>
    <div id="crayon-5b8f33c326870431697867-5" class="crayon-line">
    ctx.drawImage(img, canvasWidth-width-x, y, width, height)
    </div>
    <div id="crayon-5b8f33c326870431697867-6" class="crayon-line crayon-striped-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>




    JavaScript

    // 方法二 ctx.save() ctx.scale(-1, 1) ctx.drawImage(img,
    -width-x, y, width, height) ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c326873786084115-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326873786084115-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326873786084115-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326873786084115-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326873786084115-5">
    5
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c326873786084115-1" class="crayon-line">
    // 方法二
    </div>
    <div id="crayon-5b8f33c326873786084115-2" class="crayon-line crayon-striped-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c326873786084115-3" class="crayon-line">
    ctx.scale(-1, 1)
    </div>
    <div id="crayon-5b8f33c326873786084115-4" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, -width-x, y, width, height)
    </div>
    <div id="crayon-5b8f33c326873786084115-5" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>

-   矩阵变换法:  


    JavaScript

    // 方法一 ctx.save() ctx.transform(-1, 0, 0, 1, canvasWidth, 0)
    ctx.drawImage(img, canvasWidth-width-x, y, width, height)
    ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c326877860333719-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326877860333719-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326877860333719-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326877860333719-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326877860333719-5">
    5
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c326877860333719-1" class="crayon-line">
    // 方法一
    </div>
    <div id="crayon-5b8f33c326877860333719-2" class="crayon-line crayon-striped-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c326877860333719-3" class="crayon-line">
    ctx.transform(-1, 0, 0, 1, canvasWidth, 0)
    </div>
    <div id="crayon-5b8f33c326877860333719-4" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, canvasWidth-width-x, y, width, height)
    </div>
    <div id="crayon-5b8f33c326877860333719-5" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>




    JavaScript

    // 方法二 ctx.save() ctx.transform(-1, 0, 0, 1, 0, 0)
    ctx.drawImage(img, -width-x, y, width, height) ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c32687a381566637-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687a381566637-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687a381566637-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687a381566637-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687a381566637-5">
    5
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c32687a381566637-1" class="crayon-line">
    // 方法二
    </div>
    <div id="crayon-5b8f33c32687a381566637-2" class="crayon-line crayon-striped-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c32687a381566637-3" class="crayon-line">
    ctx.transform(-1, 0, 0, 1, 0, 0)
    </div>
    <div id="crayon-5b8f33c32687a381566637-4" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, -width-x, y, width, height)
    </div>
    <div id="crayon-5b8f33c32687a381566637-5" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>

-   像素操作法:  


    JavaScript

    ctx.drawImage(img, x, y, width, height) var img_data =
    ctx.getImageData(x, y, width, height), i, i2, t, h =
    img_data.height, w = img_data.width, w_2 = w / 2; for (var dy
    = 0; dy &lt; h; dy ++) { for (var dx = 0; dx &lt; w_2; dx ++) {
    i = (dy &lt;&lt; 2) * w + (dx &lt;&lt; 2) i2 = ((dy + 1)
    &lt;&lt; 2) * w - ((dx + 1) &lt;&lt; 2) for (var p = 0; p &lt;
    4; p ++) { t = img_data.data[i + p] img_data.data[i + p] =
    img_data.data[i2 + p] img_data.data[i2 + p] = t } } }
    ctx.putImageData(img_data, x, y)

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-5">
    5
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-6">
    6
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-7">
    7
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-8">
    8
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-9">
    9
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-10">
    10
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-11">
    11
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-12">
    12
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-13">
    13
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-14">
    14
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-15">
    15
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-16">
    16
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c32687d641942026-17">
    17
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32687d641942026-18">
    18
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c32687d641942026-1" class="crayon-line">
    ctx.drawImage(img, x, y, width, height)
    </div>
    <div id="crayon-5b8f33c32687d641942026-2" class="crayon-line crayon-striped-line">
    var img_data = ctx.getImageData(x, y, width, height),
    </div>
    <div id="crayon-5b8f33c32687d641942026-3" class="crayon-line">
        i, i2, t,
    </div>
    <div id="crayon-5b8f33c32687d641942026-4" class="crayon-line crayon-striped-line">
        h = img_data.height,
    </div>
    <div id="crayon-5b8f33c32687d641942026-5" class="crayon-line">
        w = img_data.width,
    </div>
    <div id="crayon-5b8f33c32687d641942026-6" class="crayon-line crayon-striped-line">
        w_2 = w / 2;
    </div>
    <div id="crayon-5b8f33c32687d641942026-7" class="crayon-line">
    for (var dy = 0; dy &lt; h; dy ++) {
    </div>
    <div id="crayon-5b8f33c32687d641942026-8" class="crayon-line crayon-striped-line">
        for (var dx = 0; dx &lt; w_2; dx ++) {
    </div>
    <div id="crayon-5b8f33c32687d641942026-9" class="crayon-line">
            i = (dy &lt;&lt; 2) * w + (dx &lt;&lt; 2)
    </div>
    <div id="crayon-5b8f33c32687d641942026-10" class="crayon-line crayon-striped-line">
            i2 = ((dy + 1) &lt;&lt; 2) * w - ((dx + 1) &lt;&lt; 2)
    </div>
    <div id="crayon-5b8f33c32687d641942026-11" class="crayon-line">
            for (var p = 0; p &lt; 4; p ++) {
    </div>
    <div id="crayon-5b8f33c32687d641942026-12" class="crayon-line crayon-striped-line">
                t = img_data.data[i + p]
    </div>
    <div id="crayon-5b8f33c32687d641942026-13" class="crayon-line">
                img_data.data[i + p] = img_data.data[i2 + p]
    </div>
    <div id="crayon-5b8f33c32687d641942026-14" class="crayon-line crayon-striped-line">
                img_data.data[i2 + p] = t
    </div>
    <div id="crayon-5b8f33c32687d641942026-15" class="crayon-line">
            }
    </div>
    <div id="crayon-5b8f33c32687d641942026-16" class="crayon-line crayon-striped-line">
        }
    </div>
    <div id="crayon-5b8f33c32687d641942026-17" class="crayon-line">
    }
    </div>
    <div id="crayon-5b8f33c32687d641942026-18" class="crayon-line crayon-striped-line">
    ctx.putImageData(img_data, x, y)
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>
  1. 图像镜像对称(翻转+旋转):
    • 基础调换法:
    JavaScript

    ctx.save() ctx.scale(-1, 1) ctx.translate(-width/2-x,
    y+height/2) ctx.rotate(-angle * Math.PI / 180)
    ctx.drawImage(img, -width / 2, -height / 2, width, height)
    ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c326880900901818-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326880900901818-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326880900901818-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326880900901818-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326880900901818-5">
    5
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326880900901818-6">
    6
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c326880900901818-1" class="crayon-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c326880900901818-2" class="crayon-line crayon-striped-line">
    ctx.scale(-1, 1)
    </div>
    <div id="crayon-5b8f33c326880900901818-3" class="crayon-line">
    ctx.translate(-width/2-x, y+height/2) 
    </div>
    <div id="crayon-5b8f33c326880900901818-4" class="crayon-line crayon-striped-line">
    ctx.rotate(-angle * Math.PI / 180)
    </div>
    <div id="crayon-5b8f33c326880900901818-5" class="crayon-line">
    ctx.drawImage(img, -width / 2,  -height / 2, width, height)
    </div>
    <div id="crayon-5b8f33c326880900901818-6" class="crayon-line crayon-striped-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>

-   矩阵变换法:  


    JavaScript

    ctx.save() var k = Math.tan( (180-angle)/2 * Math.PI / 180 )
    var ux = 1 / Math.sqrt(1 + k * k) var uy = k / Math.sqrt(1 +
    k * k) ctx.transform( (2*ux*ux-1), 2*ux*uy, 2*ux*uy,
    (2*uy*uy-1), x + width/2, y + height/2 ) ctx.drawImage(img,
    -width/2, -height/2, width, height) ctx.restore()

    <table>
    <colgroup>
    <col style="width: 50%" />
    <col style="width: 50%" />
    </colgroup>
    <tbody>
    <tr class="odd">
    <td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
    <div class="crayon-num" data-line="crayon-5b8f33c326883449167631-1">
    1
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326883449167631-2">
    2
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326883449167631-3">
    3
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326883449167631-4">
    4
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326883449167631-5">
    5
    </div>
    <div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326883449167631-6">
    6
    </div>
    <div class="crayon-num" data-line="crayon-5b8f33c326883449167631-7">
    7
    </div>
    </div></td>
    <td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
    <div id="crayon-5b8f33c326883449167631-1" class="crayon-line">
    ctx.save()
    </div>
    <div id="crayon-5b8f33c326883449167631-2" class="crayon-line crayon-striped-line">
    var k = Math.tan( (180-angle)/2 * Math.PI / 180 )
    </div>
    <div id="crayon-5b8f33c326883449167631-3" class="crayon-line">
    var ux = 1 / Math.sqrt(1 + k * k)
    </div>
    <div id="crayon-5b8f33c326883449167631-4" class="crayon-line crayon-striped-line">
    var uy = k / Math.sqrt(1 + k * k)
    </div>
    <div id="crayon-5b8f33c326883449167631-5" class="crayon-line">
    ctx.transform( (2*ux*ux-1), 2*ux*uy, 2*ux*uy, (2*uy*uy-1), x + width/2, y + height/2 )
    </div>
    <div id="crayon-5b8f33c326883449167631-6" class="crayon-line crayon-striped-line">
    ctx.drawImage(img, -width/2, -height/2, width, height)
    </div>
    <div id="crayon-5b8f33c326883449167631-7" class="crayon-line">
    ctx.restore()
    </div>
    </div></td>
    </tr>
    </tbody>
    </table>

图片 28

活动端 h5开荒相关内容计算(3)

2016/02/01 · HTML5 · 3 评论 · 移动端

本文笔者: 伯乐在线 - zhiqiang21 。未经小编许可,禁绝转发!
应接参加伯乐在线 专辑作者。

事先写过两篇开辟中相遇的主题素材和解决方案。那时候是 CSS 和 JavaScript 分开写的。以后写那篇小说的时候感到非常多剧情都以有内在联系的,所以不好分开。

给我们大快朵颐一下那半年来的感受啊:

知道和透亮里面是有相当大距离的。旁人谈到贰个知识点,能接上嘴并且能公布一下要好的眼光,那叫知道。蒙受标题能够想到用哪些知识点消除难题,那叫领会。

之所以有较多知识点自身的确在书上都看见过只是在常常遇上难题的时候却不知底怎么去用或然说想到去用,有的时候候会有同事给一下指引说用什么样消除难题。关键时候依然多看(看书,看旁人的代码)和多用。

认识 canvas 坐标系

canvas 上海体育场面像的旋转和扭转,常见的做法是将 canvas 坐标种类实行转变。因而,我们供给先认知 canvas 坐标种类:
图片 29
由上海体育场地可得,canvas 2D 碰着中坐标种类和 Web 的坐标类别是一律的,有以下多少个特色:

  1. 坐标原点 (0,0) 在左上角
  2. X坐标向侧边增加
  3. Y坐标向下方延伸

回来上述须要中,大家获得 canvas 对象并安装相应的宽高:

XHTML

<canvas id='myCanvas'></canvas>

1
<canvas id='myCanvas'></canvas>

JavaScript

// 获取 canvas 对象 var canvas = document.getElementById('myCanvas') canvas.width = 750 canvas.height = 1054 // 获取 canvas 2D 上下文对象 var ctx = canvas.getContext('2d')

1
2
3
4
5
6
// 获取 canvas 对象
var canvas = document.getElementById('myCanvas')
canvas.width = 750
canvas.height = 1054
// 获取 canvas 2D 上下文对象
var ctx = canvas.getContext('2d')

这儿,canvas 的坐标连串如下图所示:
图片 30

语义

2.事件冒泡引发的标题

以此主题材料是产生在和睦上篇小说《h5端呼起摄像头扫描二维码并深入分析》中的。详细的代码能够看那篇小说。

坐标种类的矩阵调换

前文介绍了 2D 绘制上下文变形(transform)转换,实际是一直改造转换的矩阵,它能够实现后面介绍的移动(translate)/旋转(rotate)/缩放( scale)转换,还是可以完成转移/镜像反射调换等。矩阵总结服从数学矩阵公式准绳:
图片 31
由上公式可得:

x' = ax + cy + e y' = bx + dy + f

1
2
x' = ax + cy + e
y' = bx + dy + f

矩阵调换可达成以下调换效果:

  1. 平移 translate:
JavaScript

x' = 1x+0y+tx = x+tx y' = 0x+1y+ty = y+ty

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c326850164003354-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326850164003354-2">
2
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c326850164003354-1" class="crayon-line">
x' = 1x+0y+tx = x+tx
</div>
<div id="crayon-5b8f33c326850164003354-2" class="crayon-line crayon-striped-line">
y' = 0x+1y+ty = y+ty
</div>
</div></td>
</tr>
</tbody>
</table>

![](http://misc.aotu.io/Yettyzyt/2017-05-25-canvas-img-rotate-and-flip/matirix_translate.png)
  1. 旋转 rotate:
JavaScript

x' = x*cosθ-y*sinθ+0 = x*cosθ-y*sinθ y' = x*sinθ+y*cosθ+0 =
x*sinθ+y*cosθ

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c326853823296543-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326853823296543-2">
2
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c326853823296543-1" class="crayon-line">
x' = x*cosθ-y*sinθ+0 = x*cosθ-y*sinθ
</div>
<div id="crayon-5b8f33c326853823296543-2" class="crayon-line crayon-striped-line">
y' = x*sinθ+y*cosθ+0 = x*sinθ+y*cosθ
</div>
</div></td>
</tr>
</tbody>
</table>

![](http://misc.aotu.io/Yettyzyt/2017-05-25-canvas-img-rotate-and-flip/matirix_rotate.png)
  1. 缩放 scale:
JavaScript

x' = Sx*x+0y+0 = Sx*x y' = 0x+Sy*y+0 = Sy*y

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c326856096178959-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326856096178959-2">
2
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c326856096178959-1" class="crayon-line">
x' = Sx*x+0y+0 = Sx*x
</div>
<div id="crayon-5b8f33c326856096178959-2" class="crayon-line crayon-striped-line">
y' = 0x+Sy*y+0 = Sy*y
</div>
</div></td>
</tr>
</tbody>
</table>

![](http://misc.aotu.io/Yettyzyt/2017-05-25-canvas-img-rotate-and-flip/matirix_scale.png)
  1. 切变
JavaScript

x' = x+y*tan(θx)+0 = x+y*tan(θx) y' = x*tan(θy)+y+0 =
x*tan(θy)+y

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c326859970129213-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c326859970129213-2">
2
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c326859970129213-1" class="crayon-line">
x' = x+y*tan(θx)+0 = x+y*tan(θx)
</div>
<div id="crayon-5b8f33c326859970129213-2" class="crayon-line crayon-striped-line">
y' = x*tan(θy)+y+0 = x*tan(θy)+y
</div>
</div></td>
</tr>
</tbody>
</table>

![](http://misc.aotu.io/Yettyzyt/2017-05-25-canvas-img-rotate-and-flip/matirix_skew.png)
  1. 镜像反射
JavaScript

// 定义(ux,uy)为直线(y=kx)方向的单位向量 ux=1/sqrt(1+k^2)
uy=k/sqrt(1+k^2) x' = (2*ux^2-1)*x+2*ux*uy*y y' =
2*ux*uy*x+(2*uy^2-1)*y

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c32685c751852723-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32685c751852723-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f33c32685c751852723-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f33c32685c751852723-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f33c32685c751852723-5">
5
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c32685c751852723-1" class="crayon-line">
// 定义(ux,uy)为直线(y=kx)方向的单位向量
</div>
<div id="crayon-5b8f33c32685c751852723-2" class="crayon-line crayon-striped-line">
ux=1/sqrt(1+k^2)
</div>
<div id="crayon-5b8f33c32685c751852723-3" class="crayon-line">
uy=k/sqrt(1+k^2)
</div>
<div id="crayon-5b8f33c32685c751852723-4" class="crayon-line crayon-striped-line">
x' = (2*ux^2-1)*x+2*ux*uy*y
</div>
<div id="crayon-5b8f33c32685c751852723-5" class="crayon-line">
y' = 2*ux*uy*x+(2*uy^2-1)*y
</div>
</div></td>
</tr>
</tbody>
</table>

![](http://misc.aotu.io/Yettyzyt/2017-05-25-canvas-img-rotate-and-flip/matirix_flip.png)

结合上述公式,可推导出图像旋转和扭转的矩阵调换达成:

  1. 图像旋转:
    图片 32
  2. 图像翻转:
    图片 33
  3. 图像镜像反射(翻转+旋转):
    图片 34

图片 35Audio

2.观念方法贯彻

与 h5 端比较,作者在 pc 端的落实是思想的浮动格局.小编的 HTML 代码如下:

XHTML

<div class="re-middle"> <div class="row-a"> <div>mac pro</div> <div class="row-a-sec">祝福红包</div> <div class="row-a-last"> iphone 6s</div> </div> <div class="row-b clearfix"> <div>巨惠券</div> <div class="row-b-sec"></div> <div class="row-b-last">20积分</div> </div> <div class="row-c"> <div>扫地机器人</div> <div class="row-c-sec">猴年限定 <p>公仔</p> </div> <div class="row-c-last">ps4</div> </div> <div class="reward-btn"></div> </div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="re-middle">
    <div class="row-a">
        <div>mac pro</div>
        <div class="row-a-sec">祝福红包</div>
        <div class="row-a-last"> iphone 6s</div>
    </div>
    <div class="row-b clearfix">
        <div>优惠券</div>
        <div class="row-b-sec"></div>
        <div class="row-b-last">20积分</div>
    </div>
    <div class="row-c">
        <div>扫地机器人</div>
        <div class="row-c-sec">猴年限定
            <p>公仔</p>
        </div>
        <div class="row-c-last">ps4</div>
    </div>
    <div class="reward-btn"></div>
</div>

css 代码如下:

CSS

.re-middle { background-color: #f89f71; width: 530px; height: 320px; position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; } .row-a, .row-b, .row-c { /*height: 106px;*/ font-size: 0; overflow: hidden; } .row-a > div, .row-c > div { float: left; width: 176px; height: 106px; text-align: center; } .row-b div { float: left; width: 176px; height: 106px; text-align: center; line-height: 106px; background-color: #f69f75; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.re-middle {
    background-color: #f89f71;
    width: 530px;
    height: 320px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
}
.row-a,
.row-b,
.row-c {
    /*height: 106px;*/
    font-size: 0;
    overflow: hidden;
}
.row-a > div,
.row-c > div {
    float: left;
    width: 176px;
    height: 106px;
    text-align: center;
}
.row-b div {
    float: left;
    width: 176px;
    height: 106px;
    text-align: center;
    line-height: 106px;
    background-color: #f69f75;
}

由地点的 css 代码相比较看大家能够肯定看出古板的转移方式的布局和“弹性盒”布局的部分优劣势:

  • float布局代码简洁,可是必需鲜明的内定盒子的大幅和惊人,多显示器的适配上会少了一些(rem动态总结除却)。
  • “弹性盒”布局代码应用新的 css3属性,须要加多额外的商家前缀,增添了代码的复杂度(增加厂家前缀能够动用 sublime 插件,一键达成,推荐自家的作品 前端开拓程序猿的 sublime 配置)
  • “弹性盒”为多显示屏的适配提供了便利性。笔者不用去关注子元素的肥瘦和冲天是不怎么,可能是荧屏的小幅度是稍微,都会依照实际请款flex自家会去适配。

遇上的二个小意思,多行文本的治罪居中:
这些九宫格内的文书成分,假如只是单行的话,只要利用 line-height 就能够消除难题,不过纵然多行吧?会出哪些状态吧,看下图:
图片 36

因而这里只好考虑不选用line-height,使用padding 来消除难点,尝试padding后的意义。如下图:
图片 37

可以观察容器的下边多出了一局地。那也是我们应用的padding的主题材料,那么怎么消除那些标题吗?那将要采纳从前提到过的box-sizing来消除难题。

CSS

.row-c-sec { color: #ffdece; font-size: 30px; padding-top: 17px; background-color: #f69f75; /*使容器的高=内容惊人+padding +border*/ box-sizing: border-box; }

1
2
3
4
5
6
7
8
.row-c-sec {
    color: #ffdece;
    font-size: 30px;
    padding-top: 17px;
    background-color: #f69f75;
    /*使容器的高=内容高度+padding +border*/
    box-sizing: border-box;
}

像素操作达成图像翻转

除了坐标系列转变,canvas 的像素操作同样能够兑现图像的扭转。首先要求明白下 getImageData() 方法(详细用法参见MDN)和 putImageData()(详细用法参见MDN)方法:

  1. getImageData()
    CanvasRenderingContext2D.getImageData() 重返二个 ImageData 对象,用来描述 canvas 区域隐含的像素数量,那个区域通过矩形表示,初步点为 (sx, sy)、宽为 sw、高为 sh。
JavaScript

ImageData ctx.getImageData(sx, sy, sw, sh);

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f33c326860751214897-1">
1
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f33c326860751214897-1" class="crayon-line">
ImageData ctx.getImageData(sx, sy, sw, sh);
</div>
</div></td>
</tr>
</tbody>
</table>
  1. putImageData()
    CanvasRenderingContext2D.putImageData() 是 Canvas 2D API 将数据从已有的 ImageData 对象绘制到位图的措施。 假诺提供了脏矩形,只可以绘制矩形的像素。

JavaScript

void ctx.putImageData(imagedata, dx, dy); void ctx.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);

1
2
void ctx.putImageData(imagedata, dx, dy);
void ctx.putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);

水平翻转达成:

JavaScript

// 绘制图像 ctx.drawImage(img, x, y, width, height) // 获取 img_data 数据 var img_data = ctx.getImageData(x, y, width, height), i, i2, t, h = img_data.height, w = img_data.width, w_2 = w / 2; // 将 img_data 的多少水平翻转 for (var dy = 0; dy < h; dy ++) { for (var dx = 0; dx < w_2; dx ++) { i = (dy << 2) * w + (dx << 2) i2 = ((dy

  • 1) << 2) * w - ((dx + 1) << 2) for (var p = 0; p < 4; p ++) { t = img_data.data[i + p] img_data.data[i + p] = img_data.data[i2 + p] img_data.data[i2 + p] = t } } } // 重绘水平翻转后的图纸 ctx.putImageData(img_data, x, y)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 绘制图像
ctx.drawImage(img, x, y, width, height)
// 获取 img_data 数据
var img_data = ctx.getImageData(x, y, width, height),
    i, i2, t,
    h = img_data.height,
    w = img_data.width,
    w_2 = w / 2;
// 将 img_data 的数据水平翻转
for (var dy = 0; dy < h; dy ++) {
    for (var dx = 0; dx < w_2; dx ++) {
        i = (dy << 2) * w + (dx << 2)
        i2 = ((dy + 1) << 2) * w - ((dx + 1) << 2)
        for (var p = 0; p < 4; p ++) {
            t = img_data.data[i + p]
            img_data.data[i + p] = img_data.data[i2 + p]
            img_data.data[i2 + p] = t
        }
    }
}
// 重绘水平翻转后的图片
ctx.putImageData(img_data, x, y)

1. HTML5的Web开辟职员版本

将HTML5的Web开垦职员版本列举在那也许有一点点奇怪,因为它只是二个HTML5专门的学问的本子。一如既往W3C的正规化有一些令人费解,因为它是为web浏览器开采职员编写的,并不是网址。然而HTML5正式出人意外的有所相当好的可读性,何况个中罗列了大气的实例。假如你从前有过阅读W3C规范的伤脱肛历,或然HTML5的正统会令你高兴。

HTML5的Web开荒职员版本是由Ben Schwarz 和同行手拉手制订的,诣在“为web开辟职员提供基础的正经指南”。它是对浏览器提供商版本规范的修改,更符合web开垦职员阅读。除了印刷风格独具更加好地可读性外,还提供了大多HTML5的附属类小部件。它使用了Offline Cache,能够协助浏览器选取<progress> 和AppCache API。search-as-you-type效率也支撑离线访谈,寻找框使用type="search"

它告诉大伙儿咋办一些了不起的办事。Ben将以此作为一个志愿项目,並且可以在GitHub上找到全体的财富。web开辟职员能够依赖这一个财富开拓种种HTML5施用。

打赏扶助本人写出越多好文章,多谢!

任选一种支付格局

图片 38 图片 39

2 赞 16 收藏 3 评论

急需背景

从贰个嬉戏须要说到:
图片 40

  1. 技艺选型:canvas
    上海图书馆所体现的游玩场景,“可乐瓶”里有八个“气泡”,须要设置不相同的卡通效果,且涉及 deviceOrientation 的交互,要求有雅量乘除改动成分状态。从品质方面思量,canvas 是不二的挑三拣四。
  2. 本领点:canvas 绘制图像
    透过对游乐场景的更是分析,可知场景中的“气泡”元素造型都以大同小异的,且不准绳,通过 canvas 直接绘制形状完结资本较高,由此供给在 canvas 上制图图像。
  3. 技巧点:canvas 图像旋转与翻转
    虽说“气泡”成分是一致的,能够动用一样的图像,但图像必要四个角度/八个方向显示,由此须求对图像实行相应的团团转与翻转(镜像),那也是本文所要介绍的关键。

后文代码以下图左侧绿框的“气泡”为示范,左侧浮现了情景中用到的多个图像:
图片 41

编辑:云顶娱乐 本文来源:h5开拓有关内容总括,更改游戏的二十个HTML5网址

关键词: