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

引入12个HTML5嬉戏网站,营造新视窗

时间:2019-10-04 15:21来源:云顶娱乐
行使 Service worker 创造二个很简单的离线页面 2016/06/07 · JavaScript· 1 评论 · ServiceWorker 本文由 伯乐在线 -刘健超-J.c翻译,艾凌风校稿。未经许可,禁绝转发! 英语出处:DeanHume。应接参

行使 Service worker 创造二个很简单的离线页面

2016/06/07 · JavaScript · 1 评论 · Service Worker

本文由 伯乐在线 - 刘健超-J.c 翻译,艾凌风 校稿。未经许可,禁绝转发!
英语出处:Dean Hume。应接参与翻译组。

让大家想像以下处境:咱们那时候在一辆通往农村的列车里,用运动器具瞧着一篇很棒的篇章。与此同期,当你点击“查看越来越多”的链接时,火车猛然步向了隧道,导致运动设备失去了互连网,而 web 页面会显示出类似以下的剧情:

图片 1

那是极其令人丧气的经验!幸运的是,web 开垦者们能透过有个别新天性来立异那类的客商体验。作者近些日子直接在折腾 ServiceWorkers,它给 web 带来的不知凡几也许性总能给自己欢快。Service Workers 的优秀特质之一是同意你检验网络央求的风貌,并让你作出相应的响应。

在那篇文章里,笔者筹算用此性子检查客商的近来网络连接意况,要是没连接则赶回三个最好轻松的离线页面。即便那是二个充足基础的案例,但它能给你带来启发,让您掌握运转并运维该性格是多么的简短!假设你没理解过 Service Worker,作者提出您看看此 Github repo,了然越来越多相关的音讯。

在该案例开头前,让大家先轻便地看看它的办事流程:

  1. 在客户第1回访谈我们的页面时,大家会设置 ServiceWorker,并向浏览器的缓存增添我们的离线 HTML 页面
  2. 然后,如若客商希图导航到另多个 web 页面(同多个网址下),但此时已断网,那么我们将回来已被缓存的离线 HTML 页面
  3. 但是,要是客户企图导航到别的八个 web 页面,而此时互连网已连接,则能照常浏览页面

图形能源 Base64 化在 H5 页面里有用武之地吗

2016/12/15 · HTML5 · Base64

引入12个HTML5嬉戏网站,营造新视窗。初稿出处: 坑坑洼洼实验室   

图片 2

将图片能源转至base64格式后可径直归入页面作为首屏直出,也足以放入css文件中,降低诉求,以加快首屏的表现速度。
唯独图片base64化,将带来叁个重合的html或css文件,是不是会潜濡默化页面包车型地铁渲染品质,浏览器又支持什么呢?

推荐介绍十二个HTML5娱乐网址

2011/07/24 · HTML5 · HTML5

导读:原来的文章小编JulioRivera是一名来自London市的创意总裁和网页设计员,他是Underworld Magazines的创办人。以下是全文。

到最近结束,笔者玩了一点年的在线娱乐。小编早已看过用Flash和其余软件制作游戏,如今是在用HTML5做游戏,只见到几个完整用CSS3做的娱乐。

HTML5正在逐步成为新的Flash,曾经在Flash上很酷的东东,如拖放和下载条等,今后已足以用HTML5完了了。 HTML5的贰个很好的财富,Github是三个不利的HTML5社交编制程序网址。在本文,作者引入十二个HTML5的玩耍网址,比比较多戏耍开拓商正在用HTML5开荒新游戏。(相关阅读:2011年最精彩的17个HTML5娱乐)

0. html5games.com

图片 3

1. html5games.net

图片 4

图片 5
2. canvasdemos.com

图片 6

3. rocketpack.fi

图片 7

图片 8
4. impactjs.com

图片 9

5. canvasrider.com

图片 10

6. freeciv.net

图片 11

7. gamesforlanguage.com

图片 12

8. yoyogames.com

图片 13

9. mozillalabs.com

图片 14

原文:Julio A Rivera  译文:敏捷翻译 – 关关

如需转发,但请注脚原作/译文出处、译文超链接和翻译等音信,否则视为侵害版权,多谢协作!

赞 收藏 评论

图片 15

精通SVG坐标种类和转移: 创立新视窗

2015/09/23 · HTML5 · SVG

原稿出处: SaraSoueidan   译文出处:Blueed@Ivan_z3   

在SVG绘制的其他一个整天,你能够经过嵌套<svg>要么应用诸如<symbol>的因一直建构新的viewport和顾客坐标系。在那篇文章中,我们将看一下大家怎么样那样做,以及那样做什么扶持大家决定SVG成分并让它们变得更为灵活(或流动)。

那是SVG坐标系和转移类别的第三篇也是最终一篇小说。在首先篇中,富含了其它要清楚SVG坐标种类基础的内需领悟的从头到尾的经过;更切实的是, SVG viewport, viewBox和 preserveAspectRatio天性。在第二篇文章里,你能够明白到任何你需求理解的关于SVG系统转换的内容。

  • 略知一二SVG坐标系和转移(第一有个别)-viewport,viewBox,和preserveAspectRatio
  • 了然SVG坐标系和转移(第二片段)-transform属性
  • 清楚SVG坐标系和转移(第三有的)-创建新视窗

通过那篇小说,本身一旦你早就读了那个种类的第一有的有关SVG viewport, viewBox 和 preserveAspectRatio 属性的源委。在读书那篇小说以前你无需读第二篇有关坐标系转换的从头到尾的经过。

有关Web静态财富缓存自动更新的想想与奉行

2016/04/06 · 基础技艺 · 静态能源

正文小编: 伯乐在线 - Natumsol 。未经小编许可,禁绝转发!
迎接参与伯乐在线 专辑撰稿人。

前言

对在此以前端工程化来说,静态资源的缓存与更新一直是贰个十分的大的主题材料,各大公司也生产了分别的消除方案,如百度的FIS工具集。若无缓慢解决好那几个主题材料,不独有会给客户产生不佳的客户体验,何况还有恐怕会给开辟和调度带了繁多不要求的劳动。关于怎么样自动实现缓存更新,以下是和煦的一些体会和体会。

让大家早先吧

倘令你有以下 HTML 页面。那纵然可怜基础,但能给你完整思路。

XHTML

<!DOCTYPE html>

1
<!DOCTYPE html>

跟着,让大家在页面里登记 Service Worker,这里仅创制了该目的。向正要的 HTML 里增加以下代码。

JavaScript

<script> // Register the service worker // 注册 service worker if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js').then(function(registration) { // Registration was successful // 注册成功 console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { // registration failed :( // 注册失利 :( console.log('ServiceWorker registration failed: ', err); }); } </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
// Register the service worker
// 注册 service worker
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
    // Registration was successful
    // 注册成功
    console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
    // registration failed :(
    // 注册失败 :(
    console.log('ServiceWorker registration failed: ', err);
   });
}
</script>

然后,大家供给创制 Service Worker 文件并将其取名字为‘service-worker.js‘。大家筹划用那一个 Service Worker 拦截任何网络央求,以此检查互联网的连接性,并基于检查结果向顾客再次来到最适合的内容。

JavaScript

'use strict'; var cacheVersion = 1; var currentCache = { offline: 'offline-cache' + cacheVersion }; const offlineUrl = 'offline-page.html'; this.addEventListener('install', event => { event.waitUntil( caches.open(currentCache.offline).then(function(cache) { return cache.addAll([ './img/offline.svg', offlineUrl ]); }) ); });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict';
 
var cacheVersion = 1;
var currentCache = {
  offline: 'offline-cache' + cacheVersion
};
const offlineUrl = 'offline-page.html';
 
this.addEventListener('install', event => {
  event.waitUntil(
    caches.open(currentCache.offline).then(function(cache) {
      return cache.addAll([
          './img/offline.svg',
          offlineUrl
      ]);
    })
  );
});

在上头的代码中,大家在装置 Service Worker 时,向缓存增加了离线页面。假诺大家将代码分为几小块,可看出前几行代码中,作者为离线页面钦命了缓存版本和U奥德赛L。如若你的缓存有例外版本,那么您只需革新版本号就能够轻巧地消除缓存。在大约在第 12 行代码,小编向这几个离线页面及其资源(如:图片)发出央浼。在获得成功的响应后,我们将离线页面和有关能源丰裕到缓存。

今日,离线页面已存进缓存了,大家可在需求的时等候检查索它。在同贰个 ServiceWorker 中,大家需求对无网络时回来的离线页面增加相应的逻辑代码。

JavaScript

this.add伊夫ntListener('fetch', event => { // request.mode = navigate isn't supported in all browsers // request.mode = naivgate 并从未拿走全数浏览器的支撑 // so include a check for Accept: text/html header. // 由此对 header 的 Accept:text/html 进行把关 if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) { event.respondWith( fetch(event.request.url).catch(error => { // Return the offline page // 重临离线页面 return caches.match(offlineUrl); }) ); } else{ // Respond with everything else if we can // 重临任何大家能再次回到的事物 event.respondWith(caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
this.addEventListener('fetch', event => {
  // request.mode = navigate isn't supported in all browsers
  // request.mode = naivgate 并没有得到所有浏览器的支持
  // so include a check for Accept: text/html header.
  // 因此对 header 的 Accept:text/html 进行核实
  if (event.request.mode === 'navigate' || (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
        event.respondWith(
          fetch(event.request.url).catch(error => {
              // Return the offline page
              // 返回离线页面
              return caches.match(offlineUrl);
          })
    );
  }
  else{
        // Respond with everything else if we can
        // 返回任何我们能返回的东西
        event.respondWith(caches.match(event.request)
                        .then(function (response) {
                        return response || fetch(event.request);
                    })
            );
      }
});

为了测量试验该意义,你能够运用 Chrome 内置的开辟者工具。首先,导航到您的页面,然后一旦设置上了 ServiceWorker,就开荒 Network 标签并将节流(throttling)改为 Offline。(译者注:若将节流设置为 Offline 没意义,则可因而关闭互连网可能通过360安全警卫防止 Chrome 访谈互联网)

图片 16

要是您刷新页面,你应当能看出相应的离线页面!

图片 17

万一您只想大约地质衡量试该作用而不想写任何代码,那么您能够访谈作者已创建好的 demo。别的,上述全体代码能够在 Github repo 找到。

自个儿晓得用在此案例中的页面非常的粗略,但您的离线页面则在于你协和!若是你想深切该案例的剧情,你可认为离线页面增加缓存破坏( cache busting),如: 此案例。

如何总结?

经过Navigation Timing记录的最主要时刻点来计算页面完结所用的时间,并由此Chrome开垦工具来追踪细节

JavaScript

var timing = window.performance.timing timing.domLoading //浏览器开头分析 HTML 文书档案第一群接受的字节 timing.domInteractive // 浏览器达成剖判何况具有 HTML 和 DOM 创设完成timing.domContentLoaded伊芙ntStart //DOM 深入分析达成后,网页国内资本源加载伊始的岁月 timing.domContentLoaded伊夫ntEnd //DOM 深入分析完结后,网页国内资本源加载成功的小时(如 JS 脚本加载实践完成) timing.domComplete //网页上保有能源(图片等) 下载完结,且筹划妥帖的时刻

1
2
3
4
5
var timing = window.performance.timing
timing.domLoading //浏览器开始解析 HTML 文档第一批收到的字节
timing.domInteractive // 浏览器完成解析并且所有 HTML 和 DOM 构建完毕timing.domContentLoadedEventStart //DOM 解析完成后,网页内资源加载开始的时间
timing.domContentLoadedEventEnd //DOM 解析完成后,网页内资源加载完成的时间(如 JS 脚本加载执行完毕)
timing.domComplete //网页上所有资源(图片等) 下载完成,且准备就绪的时间

以上定义来自chrome官方文书档案,在别的意况下只怕会相差极大,从测量检验结果看,上边包车型大巴build时间在android+微信景况中平昔是0,对此只怕是因为渲染机制差距,此处不做深入测试。除osx+chrome之外情形的数额仅作仿效。

JavaScript

build = timing.domComplete - timing.domContentLoadedEventStart //间隔记录网页国内资本源加载和显示时间。 complete = timing.domComplete - timing.domLoading //页面接收到数量开端到显示完成的总时间。

1
2
build = timing.domComplete - timing.domContentLoadedEventStart //间隔记录网页内资源加载和呈现时间。
complete = timing.domComplete - timing.domLoading //页面接收到数据开始到呈现完毕的总时间。

嵌套<svg>元素

在首先局地大家商议了<svg>要素怎样为SVG画布内容建设构造二个视窗。在SVG绘制进度中的任何一个整天,你能够创设一个新的视窗在那之中蕴藏的图纸是由此把贰个<svg>要素富含在另四在这之中绘制的。通过确立新视窗,你隐性得创设了贰个新视窗坐标系和新顾客坐标系。

诸如,试想有三个<svg>以及中间的始末:

XHTML

<svg xmlns="" xmlns:xlink="; <!-- some SVG content --> <svg> <!-- some inner SVG content --> </svg> <svg>

1
2
3
4
5
6
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- some SVG content -->
    <svg>
        <!-- some inner SVG content -->
    </svg>
<svg>

 

先是件要求潜心的是内容<svg>要素无需声诺优能(Nutrilon)个命名空间xmlns因为默许和外围<svg>的命名空间相同。当然,如若在HTML5文书档案中外层<svg>也无需命名空间。

您能够采纳贰个嵌套的SVG来把成分结合在共同然后在父SVG中一定它们。今后,你也能够把成分结合在一道同期使用组<g>来牢固-通过把成分包蕴在一组<g>元素中。你可以使用transform属性在画布中牢固它们。但是,使用<svg>不容争辩好过使用<g>。使用x和y坐标来定位,在许多处境下,比选取转变特别方便。其余,<svg>要素接受宽高值,<g>不行。那代表,<svg>大概并供给的,因为它能够创立八个新的viewport和坐标系,你可以无需也不想要。

通过给<svg>声称宽高值,你把内容限制在通过x,y,widthheight性子定义的viewport的界限。任布鲁诺过界限的剧情会被裁切。

即使您不注解xy质量,它们暗许是0。倘诺你不注明heightwidth属性,<svg>会是父SVG宽度和中度的百分之百。

别的,注脚客商坐标系实际不是暗许的也会潜移暗化内部<svg>的内容。

<svg>内的元素百分比率的证明会基于<svg>总括,实际不是外围<svg>。举个例子,上面包车型大巴代码会产生内层SVG等于400单位,里面包车型大巴正方形是200个单位:

XHTML

<svg width="800" height="600"> <svg width="50%" ..> <rect width="50%" ... /> </svg> </svg>

1
2
3
4
5
<svg width="800" height="600">
    <svg width="50%" ..>
        <rect width="50%" ... />
    </svg>
</svg>

 

万一最外层<svg>的大幅为百分之百(举例,借使它在叁个文书档案中内联可能您想要它能够流动),内层SVG会扩充拉伸来保持小幅度为外层SVG的一半-那是劫持的。

嵌套SVG在给SVG画布中的成分扩展灵活性和扩大性时进一步有用。我们明白,使用viewBox值和preserveAspectRatio,我们曾经得以创立响应式SVG。最外层<svg>的急剧可以设置成百分之百来有限支撑它扩大拉伸到它的器皿(或页面)扩展或拉伸。然后经过选择view博克斯值和 preserveAspectRatio,大家能够保障SVG画布能够自适应viewport中的改换(最外层svg)。作者在CSSConf解说的幻灯片中写到了关于响应式SVG的开始和结果。你能够在这里查阅那个本领。

然而,当大家像这么创设一个响应式SVG,整个画布以及全数绘制在上头的成分都会有反馈并且还要改换。但偶然,你只想让图形中的二个因素变为响应式,何况维持其余东西“固定”在三个岗位和/或尺寸。那时候嵌套svg就很有用。

svg要素有独立于它父成分的坐标系,它能够有单独的viewBoxpreserveAspectRatio属性,你能够轻巧修改里面内容的尺寸和职位。

故此,要让三个成分尤为灵敏,大家得以把它包裹在<svg>元素中,并且给svg一个弹性的升幅来适应最外层SVG的上涨的幅度,然后申明preserveAspectRatio="none"那样的话里面包车型地铁图样会扩展和拉伸到容器的宽度。注意svg能够多层嵌套,不过为了让事情简洁,作者在那篇小说里只嵌套一层深度。

为了演示嵌套svg哪些发挥成效,让我们来看有的例子。

静态能源发表的痛点

作者们领会,缓存对于前端品质的优化是分外根本的,在正规公布类别的时候,对于这一个不平时退换的静态财富比方各类JS工具库、CSS文件、背景图片等等大家会安装叁个很大的缓存过期岁月(max-age),当客商再一次做客这么些页面包车型客车时候就能够直接使用缓存并非重新从服务器获取,那样不只能够缓慢消除服务端的下压力,还是能省去网络传输的流量,同期顾客体验也更加好(客户张开页面越来越快了)。那样看起来很圆满,你好自家好大家都好,but,理想是光明的,现实是冷酷的,假使存在这么一个浏览器,强制缓存静态能源还不给你消除缓存的火候(微信,说的就是您!),该怎么做?即便你的服务端已更新,文件的Etag值已改造,不过微信正是不给您更新文件…请允许笔者做贰个哀愁的表情…

对此那个主题材料,大家很当然的主见是在每一回宣布新本子的时候给持有静态财富的伏乞前面加上三个版本参数或时间戳,类似于/js/indx.js?ver=1.0.1,但是那样存在三个问题:

  1. 微信对于加参数的静态能源依然事先利用缓存版本(实际测验的情形是那样的)。
  2. 一旦那样是一蹴而就的,那么对于没有改观的静态财富也会再度从服务器获取实际不是读取缓存,未有丰富利用缓存。

那么有未有一种艺术能够活动辨识出哪些文件发出了转移并让客商端主动创新呢?答案是迟早的。大家清楚四个文件的MD5可以独一标志多少个文书。若文件发出了扭转,文件的指纹值MD5也随之转移。利用这么些天性我们就可以标记出哪位静态能源发生了改造,并让客商端主动创新。

张开阅读

除此以外,还会有多少个很棒的离线成效案例。如:Guardian 构建了叁个颇负 crossword puzzle(填字游戏)的离线 web 页面 – 因而,固然等待网络重连时(即已在离线状态下),也能找到一点野趣。小编也推荐看看 Google Chrome Github repo,它满含了累累见仁见智的 瑟维斯 Worker 案例 – 个中有个别施用案例也在那!

但是,如若你想跳过上述代码,只是想大约地通过叁个库来拍卖相关操作,那么本身推荐您看看 UpUp。那是二个轻量的剧本,能令你更自在地应用离线功效。

打赏辅助作者翻译越多好作品,谢谢!

打赏译者

场景1,内嵌至css文件中

例子

试想大家有如下的SVG:图片 18

上述SVG是响应式的。改造显示器的尺码会导致整个SVG图形依照供给做出反应。上边包车型客车截图展现了拉伸页面包车型客车结果,以及SVG如何变得更加小。注意SVG的开始和结果什么依据SVG视窗和互动保持它们的初叶地点。图片 19

动用嵌套SVG,大家将转移那么些景况。大家得以对SVG中种种独立的成分依据SVG视窗声澳优个地点,所以随着SVG 视窗尺寸的更换(即最外层svg的转移),每种成分独立于另外因素发生变动。

注意,在今年,你要求熟识SVG viewport, viewBox, 和preserveAspectRatio是何许生效的。

我们将在创建三个成效,当荧屏尺寸变化时,蛋壳的上一些移动使得个中的可爱的小鸡呈现出来,如下图所示:图片 20

为了达到这几个成效,蛋的上半某些必得和其余一些分离出来单独包罗八个和好的svg。这个svg包罗框会有多个IDupper-shell

接下来,我们保险新的svg#upper-shell和外围SVG有一致的莫斯中国科学技术大学学和宽窄。能够透过在svg上声明width="100%"``height="100%"抑或不申明任何中度和宽窄来落实。如若内层SVG上从不评释任何宽高,它会活动扩大为外层SVG宽高的100%

末尾,为了保障上壳被“抬”起或定点在svg#upper-shell顶端的着力,大家将选取合适的preserveAspectRatio值来确认保证viewBox被固定在视窗的顶上部分大旨-值是xMidYMin

SVG图形的代码如下:

XHTML

<svg version="1.1" xmlns="" xmlns:xlink="; <!-- ... --> <svg viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet"> <!-- the chicken illustration --> <g id="chicken"> <!-- ... --> </g> <!-- path forming the lower shell --> <path id="lower-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/> </svg> <svg id="upper-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMin meet"> <!-- path forming the upper shell --> <path id="the-upper-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/> </svg> </svg>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- ... -->
    <svg viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet">
        <!-- the chicken illustration -->
        <g id="chicken">
            <!-- ... -->
        </g>
        <!-- path forming the lower shell -->
        <path id="lower-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/>
    </svg>
 
    <svg id="upper-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMin meet">
        <!-- path forming the upper shell -->
        <path id="the-upper-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/>
    </svg>
</svg>

这一年,注意在嵌套svg#upper-shell上宣示的viewBox和最外层svg有同等的值(在它被移除在此以前)。大家用平等的viewBox值作者原因正是如此,SVG在大屏幕上保持最先的人之常情。

据此,那件事是那般的:我们初阶一个SVG-在大家的事例中,那是一张里面藏着三个小鸡的带裂纹的蛋。然后,我们成立了另一“层”并把上一些的壳放在里面-这一层通过运用嵌套svg创建。嵌套svg和外层svg的尺码和viewBox同等。最后,内层SVG的viewBox被设置成不管荧屏尺寸是不怎么都“固定”在viewport的最上部-这确定保证了当荧屏尺寸很窄时SVG被拉开,上层的壳被发展举起,因而呈现出“遮蔽”在里面的小鸡。图片 21

假若显示器尺寸拉伸,SVG被拉开,使用preserveAspectratio="xMidYMin meet"把带有上部分壳的view博克斯被固定到viewport的顶上部分。图片 22

点击下边按键来查看在线SVG。记住更动显示器尺寸再看SVG变化。

在线案例

嵌套或”分层”SVG令你能够依照改造的视窗定位SVG的一部分,在有限支撑成分宽高比的景况下。所以图片能够在不扭转内容成分的情事下自适应。

万一大家想要整个鸡蛋剥离彰显出小鸡,大家得以单独用叁个svg层富含下部分壳,viewBox也长久以来。确认保证下一些壳向下活动并牢固在视窗的平底宗旨,大家利用preserveAspectRatio="xMidYMax meet"来稳固。代码如下:

XHTML

<svg version="1.1" xmlns="" xmlns:xlink="; <svg id="chick" viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet"> <!-- the chicken illustration --> <g id="chick"> <!-- ... --> </g> </svg> <svg id="upper-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet"> <!-- path forming the upper shell --> <path id="the-upper-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/> </svg> <svg id="lower-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMax meet"> <!-- path forming the lower shell --> <path id="the-lower-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/> </svg> </svg>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <svg id="chick" viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet">
        <!-- the chicken illustration -->
        <g id="chick">
            <!-- ... -->
        </g>
    </svg>
 
    <svg id="upper-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMid meet">
        <!-- path forming the upper shell -->
        <path id="the-upper-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/>
    </svg>
 
    <svg id="lower-shell" viewBox="0 0 315 385" preserveAspectRatio="xMidYMax meet">
        <!-- path forming the lower shell -->
        <path id="the-lower-shell" fill="url(#gradient)" stroke="#000000" stroke-width="1.5003" d="..."/>
    </svg>
</svg>

每个svg层/viewport等于最外层svg宽高的百分之百。所以大家着力有了三个别本。每层满含二个要素-上有个别壳,下某个壳,或小鸡。三层的viewBox是一模一样的,唯有preserveAspectRatio不同。图片 23

当然,在那几个事例里,一起初的图样中型迷你鸡隐敝在蛋里,随着显示器变小才突显出来。但是,你能够做一些不均等的:你能够起来在小显示器上创建多个图片,然后在大显示屏上显得一些东西;即当svg变宽时才有更加多垂直空间来呈现成分。

您能够更有成立性,依照差异显示器尺寸来呈现和掩饰成分-使用媒体询问-把新因素通过一定措施固定来到达特定的职能。想象力是不断。

还要注意嵌套svg无需和容器svg有同一的宽高;你能够注明宽高并且限制svg内容,越过边界裁切-那都在于你想要达到怎么着效果。

怎么缓慢解决?

经过前文的牵线,大家清楚了能够动用文件的螺纹值来标记需求顾客端主动立异的公文,不过如何完结吗?经过和谐的观念和科研后,大约思路为:

  1. 在每回公布在此以前,利用Gulp对具有的静态能源开展预管理,重命名字为原文件名 + 文件MD5值 + 文件后缀名的形式。比如index.js重命名字为index-c6c9492ce6.js
  2. 变动一份manifest,标记了预管理前后文件之间的相应关系.manifest文本的楷模为:
JavaScript

{ "index.js": "index-c6c9492ce6.js", "lib/jQuery/jQuery.js":
"lib/jQuery/jQuery-683c73084c.js", "require.js":
"require-c8e8015f8d.js", "style.css": "style-125d3a3f82.css",
"tools.js": "tools-5666ee48e9.js" }

<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-5b8f4b6669294327058473-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b6669294327058473-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f4b6669294327058473-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b6669294327058473-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f4b6669294327058473-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b6669294327058473-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f4b6669294327058473-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-5b8f4b6669294327058473-1" class="crayon-line">
{
</div>
<div id="crayon-5b8f4b6669294327058473-2" class="crayon-line crayon-striped-line">
  &quot;index.js&quot;: &quot;index-c6c9492ce6.js&quot;,
</div>
<div id="crayon-5b8f4b6669294327058473-3" class="crayon-line">
  &quot;lib/jQuery/jQuery.js&quot;: &quot;lib/jQuery/jQuery-683c73084c.js&quot;,
</div>
<div id="crayon-5b8f4b6669294327058473-4" class="crayon-line crayon-striped-line">
  &quot;require.js&quot;: &quot;require-c8e8015f8d.js&quot;,
</div>
<div id="crayon-5b8f4b6669294327058473-5" class="crayon-line">
  &quot;style.css&quot;: &quot;style-125d3a3f82.css&quot;,
</div>
<div id="crayon-5b8f4b6669294327058473-6" class="crayon-line crayon-striped-line">
  &quot;tools.js&quot;: &quot;tools-5666ee48e9.js&quot;
</div>
<div id="crayon-5b8f4b6669294327058473-7" class="crayon-line">
}
</div>
</div></td>
</tr>
</tbody>
</table>
  1. 在渲染视图模版的时候,依照manifest,将预管理前的静态资置换为预管理后的静态财富。
  2. 要是在浏览器端用到了模块加载器(这里以促成了速龙规范的requireJS为例),在每一回发布的时候需求依照manifest对模块举办mapping,将配备文件以内联JS的样式写入到模版页面里面,类似于:
JavaScript

&lt;script&gt; requirejs.config({ "baseUrl": "/js", "map": { "*": {
"index": "index-c6c9492ce6", "jquery":
"lib/jQuery/jQuery-683c73084c", "require": "require-c8e8015f8d",
"tools": "tools-5666ee48e9" } } }); &lt;/script&gt;

<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-5b8f4b666929d715705975-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-8">
8
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-9">
9
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-10">
10
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-11">
11
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4b666929d715705975-12">
12
</div>
<div class="crayon-num" data-line="crayon-5b8f4b666929d715705975-13">
13
</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-5b8f4b666929d715705975-1" class="crayon-line">
&lt;script&gt;
</div>
<div id="crayon-5b8f4b666929d715705975-2" class="crayon-line crayon-striped-line">
requirejs.config({
</div>
<div id="crayon-5b8f4b666929d715705975-3" class="crayon-line">
    &quot;baseUrl&quot;: &quot;/js&quot;,
</div>
<div id="crayon-5b8f4b666929d715705975-4" class="crayon-line crayon-striped-line">
    &quot;map&quot;: {
</div>
<div id="crayon-5b8f4b666929d715705975-5" class="crayon-line">
        &quot;*&quot;: {
</div>
<div id="crayon-5b8f4b666929d715705975-6" class="crayon-line crayon-striped-line">
            &quot;index&quot;: &quot;index-c6c9492ce6&quot;,
</div>
<div id="crayon-5b8f4b666929d715705975-7" class="crayon-line">
            &quot;jquery&quot;: &quot;lib/jQuery/jQuery-683c73084c&quot;,
</div>
<div id="crayon-5b8f4b666929d715705975-8" class="crayon-line crayon-striped-line">
            &quot;require&quot;: &quot;require-c8e8015f8d&quot;,
</div>
<div id="crayon-5b8f4b666929d715705975-9" class="crayon-line">
            &quot;tools&quot;: &quot;tools-5666ee48e9&quot;
</div>
<div id="crayon-5b8f4b666929d715705975-10" class="crayon-line crayon-striped-line">
        }
</div>
<div id="crayon-5b8f4b666929d715705975-11" class="crayon-line">
    }
</div>
<div id="crayon-5b8f4b666929d715705975-12" class="crayon-line crayon-striped-line">
});
</div>
<div id="crayon-5b8f4b666929d715705975-13" class="crayon-line">
&lt;/script&gt;
</div>
</div></td>
</tr>
</tbody>
</table>

编辑:云顶娱乐 本文来源:引入12个HTML5嬉戏网站,营造新视窗

关键词: