金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > web前端 > 欢迎来到HTML5,是个什么样的东西

欢迎来到HTML5,是个什么样的东西

发布时间:2019-11-03 05:38编辑:web前端浏览(170)

    Web Components 是个什么样的东西

    2016/09/04 · HTML5, JavaScript · Web Components

    原文出处: teabyii   

    前端组件化这个主题相关的内容已经火了很久很久,angular 刚出来时的 Directive 到 angular2 的 components,还有 React 的components 等等,无一不是前端组件化的一种实现和探索,但是提上议程的 Web Components 标准是个怎样的东西,相关的一些框架或者类库,如 React,Angular2,甚至是 x-tag,polymer 现在实现的组件化的东西和 Web Components 标准差别在哪里?我花时间努力地把现有的 W3C Web Components 文档看了下,然后坚强地写下这些记录。

    首先我们需要知道,Web Components 包括了四个部分:

    • Custom Elements
    • HTML Imports
    • HTML Templates
    • Shadow DOM

    这四部分有机地组合在一起,才是 Web Components。

    可以用自定义的标签来引入组件是前端组件化的基础,在页面引用 HTML 文件和 HTML 模板是用于支撑编写组件视图和组件资源管理,而 Shadow DOM 则是隔离组件间代码的冲突和影响。

    下边分别是每一部分的笔记内容。

    欢迎来到HTML5.2时代!

    2016/10/10 · HTML5 · 4 评论 · HTML5.2

    原文出处: Annarita Tranfici   译文出处:众成翻译   

    图片 1

    21世纪,2016年6月,HTML 5.1从工作草案变为了候选标准。正如你了解的那样,这是将提案变为标准的第二步,Web的如此发展也将影响我们的日常生活。作为候选标准,W3C认为HTML 5.1已经通过了review并且能够满足工作组的技术需求了。

    几天前,HTML 5.1被提案进入第三阶段:推荐标准(PR)。这意味着这个规范只需要进行微量的修改就可以进入W3C标准的最后一阶段了。

    随着HTML 5.1接近最后阶段,工作组开始关注于未来。于是工作组正式开始研究HTML 5.2工作草案,因此,W3C在社区中发布了HTML 5.2规范来让W3C成员、公众以及其他组织进行review。

    HTML5凭借语义性、兼容性和不需要第三方依赖的API迅速席卷了整个互联网。这是一场革命性的技术变革。HTML 5.1保留了先前版本全部优良的特性又引入了一些语义元素的重大改进。想想HTML 5.1都带来了什么,可想而知HTML 5.2会更为惊艳。

    在本文中,我将做一个关于HTML发展的简短的概述,包括HTML 5,HTML 5.1,和HTML 5.2中引入和废除的特性。

    以下是本文的重点:

    • HTML 5引入的语义元素概述;
    • 关于HTML 5和HTML 5.1中新特性和未定案特性的变化;
    • HTML 5.2的介绍以及对于接下来可能发生的事的猜想;

    打造高大上的Canvas粒子动画

    2016/08/22 · HTML5 · 5 评论 · Canvas

    原文出处: 腾讯ISUX   

    首先来看下我们准备要做的粒子动画效果是怎么样的~

    是这样:

    图片 2

    或者是这样:

    图片 3

    甚至是这样:

    图片 4

    很酷炫!

    那如何去实现类似上面的粒子动画甚至根据自己的喜好去做更多其他轨迹的动画呢~请看下面详细的讲解。

    Custom Elements

    HTML 5 新的语义元素

    HTML 5.1最伟大的创新之一就是引入了新的语义元素。它们也许(很有可能)会成为你如今日常写码的一部分。就是因为有了标记性的结构和语义,才使我们的站点有了很大改善。

    我将主要提到的元素有:

    • <main> 定义主要内容;
    • <nav> 定义主体模块或者导航链接的集合;
    • <article> 包含独立于页面其他部分的内容;
    • <header> 包含介绍部分或者是导航链接的集合;
    • <footer> 定义了整个页面或其中一部分的页脚(并且通常包含原创作者,版权信息,联系方式和站点地图);
    • <aside>定义了所处内容的侧边栏,<section>定义了文档中特定的部分。

    将两个革命性的元素单独拿出来说,它们帮助我们解决了Flash等技术难题:

    • <audio>用来在文档中嵌入音频内容
    • <video>用来在文档中嵌入视频内容

    在上面提到的所有元素中,最有争议的无非是<main>元素。在W3C规范的描述中它是页面中的主要内容,然而万维网超文本应用技术工作组(WHATWG)却定义<main>元素为其他元素主要内容的容器。由于这个区别,WHATWA没有限制一个文档中<main>元素出现的次数。按WHATWA的定义,如果你在一个页面中定义了多个<article>元素,你就可以给每个<article>标记<main>元素。

    两种规范在其他方面也有一些不同,例如<hgroup>的存在(W3C标准中删除了此元素,但它仍旧存在于WHATWG中–译者注)。这篇文章中不会详细讲解这部分内容,如果你感兴趣可以阅读Aurelio De Rosa的这篇文章,W3C vs. WHATWG HTML5 规范 – 文档中的不同,你可以从中了解到很多。

    现在我们来看一下HTML 5和HTML 5.1中的不同。

    概述

    Custom Elements 顾名思义,是提供一种方式让开发者可以自定义 HTML 元素,包括特定的组成,样式和行为。支持 Web Components 标准的浏览器会提供一系列 API 给开发者用于创建自定义的元素,或者扩展现有元素。

    这一项标准的草案还处于不稳定的状态,时有更新,API 还会有所变化,下边的笔记以 Cutsom Elements 2016.02.26 这个版本为准,因为在最新的 chrome 浏览器已经是可以工作的了,这样可以使用 demo 来做尝试,最后我会再简单写一下最新文档和这个的区别。

    HTML 5 和 HTML 5.1的不同之处

    这部分将主要介绍HTML 5.1中一些尚未确定的元素、方法和属性。我将就其概念和优点进行介绍,并且提供了一些其他资料,如果感兴趣可以进行扩展阅读。需要注意的是,这里提到的大部分新元素都在HTML5中被提出却因为某些原因没有通过提案,所以对你来说也许并不陌生。例如 <details><summary>就是从HTML 5转移至HTML 5.1规范中的。

    就像其他规范一样,HTML 5.1也引入了一些被移除不久的特性。其中之一就是inert属性,它在2014年被提出。正如Github上这个discussion中所提到的,这个属性自从被归入<dialog>元素后就被遗弃了。

    开始使用新的元素吧~

    技术选择

    因为粒子数量很多,而且涉及到图像像素处理,所以这里使用Canvas是不二选择。

     

    注意,以下演示的代码只是关键代码,重点在于解决思路。

    registerElement

    首先,我们可以尝试在 chrome 控制台输入 HTMLInputElement,可以看到是有这么一个东西的,这个理解为 input DOM 元素实例化时的构造函数,基础的是 HTMLElement

    Web Components 标准提出提供这么一个接口:

    JavaScript

    document.registerElement('x-foo', { prototype: Object.create(HTMLElement.prototype, { createdCallback: { value: function() { ... } }, ... }) })

    1
    2
    3
    4
    5
    6
    7
    8
    document.registerElement('x-foo', {
      prototype: Object.create(HTMLElement.prototype, {
        createdCallback: {      
          value: function() { ... }
        },
        ...
      })
    })

    你可以使用 document.registerElement 来注册一个标签,标准中为了提供 namesapce 的支持,防止冲突,规定标签类型(也可以理解为名字)需要使用 - 连接。同时,不能是以下这一些:

    • annotation-xml
    • color-profile
    • font-face
    • font-face-src
    • font-face-uri
    • font-face-format
    • font-face-name
    • missing-glyph

    第二个参数是标签相关的配置,主要是提供一个 prototype,这个原型对象是以 HTMLElement 等的原型为基础创建的对象。然后你便可以在 HTML 中去使用自定义的标签。如:

    XHTML

    <div> <x-foo></x-foo> </div>

    1
    2
    3
    <div>
      <x-foo></x-foo>
    </div>

    是不是嗅到了 React 的味道?好吧,React 说它自己主要不是做这个事情的。

    HTML 5.1引入的新元素

    第一个准备讲的就是<picture>元素。它的用处就是把source元素和srcset属性结合到一起,更方便的是当网页展示在小屏幕(例如移动设备)上时,它可以提供内存和尺寸较小的图片。

    <picture>元素的另一个功能就是当页面加载在高分辨率屏幕上的时候就提供高密度的图片。由于这个元素的存在,你可以更好的给用户展示图片并且很好的避免过大的高密度图片与网站不相称。如果你想更多的了解,可以阅读我的另外两篇文章:使用Picture元素提升响应式图片 和 响应式图片第一步:使用srcset。当然也有一些人主张picture元素的不必要的 (大多数时候)。不管怎样,这都取决于你的选择。

    接下来介绍<dialog>元素,当下有Chrome和Opera已经对其进行支持,微软Edge则仍在考虑中。这个元素可以用来作为对话框,确认框或者窗体。可以通过把<form>元素的method属性设置为dialog来把其合并到<dialog>元素中。这样这个form表单提交的时候,这个对话框就会关闭同时把提交按钮返回的值设置为returnValue。这里有一个在线的demo,代码来自MDN, 由JSFiddle展示。

    同时<details><summary>也是值得推荐的新增元素。<details>展示给用户 在这个组件上可以获取额外的信息或者控件。<summary>元素作为总结,标题,或是图例放在<details>的内容中,二者互相配合。目前有Chrome,Firefox(版本49+),Opera,Safari支持了<details>元素。我认为这两个元素未来会在折叠/展开组件上起很大作用。

    一、绘制粒子轮廓图

    首先要在canvas画布上绘制一个由粒子组成的轮廓图,记录下每一个粒子的坐标,这样才能有后续的动画。

    生命周期和回调

    在这个 API 的基础上,Web Components 标准提供了一系列控制自定义元素的方法。我们来一一看下:

    一个自定义元素会经历以下这些生命周期:

    • 注册前创建
    • 注册自定义元素定义
    • 在注册后创建元素实例
    • 元素插入到 document 中
    • 元素从 document 中移除
    • 元素的属性变化时

    这个是很重要的内容,开发者可以在注册新的自定义元素时指定对应的生命周期回调来为自定义元素添加各种自定义的行为,这些生命周期回调包括了:

    • createdCallback
      自定义元素注册后,在实例化之后会调用,通常多用于做元素的初始化,如插入子元素,绑定事件等。
    • attachedCallback
      元素插入到 document 时触发。
    • detachedCallback
      元素从 document 中移除时触发,可能会用于做类似 destroy 之类的事情。
    • attributeChangedCallback
      元素属性变化时触发,可以用于从外到内的通信。外部通过修改元素的属性来让内部获取相关的数据并且执行对应的操作。

    这个回调在不同情况下有对应不同的参数:

    • 设置属性时,参数列表是:属性名称,null,值,命名空间
    • 修改属性时,参数列表是:属性名称,旧值,新值,命名空间
    • 删除属性时,参数列表是:属性名称,旧值,null,命名空间

    好了,就上边了解到的基础上,假设我们要创建一个自定义的 button-hello 按钮,点击时会 alert('hello world'),代码如下:

    JavaScript

    document.registerElement('button-hello', { prototype: Object.create(HTMLButtonElement.prototype, { createdCallback: { value: function createdCallback() { this.innerHTML = '<button>hello world</button>' this.addEventListener('click', () => { alert('hello world') }) } } }) })

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    document.registerElement('button-hello', {
      prototype: Object.create(HTMLButtonElement.prototype, {
        createdCallback: {
          value: function createdCallback() {
            this.innerHTML = '<button>hello world</button>'
            this.addEventListener('click', () => {
              alert('hello world')
            })
          }
        }
      })
    })

    要留意上述代码执行之后才能使用 <button-hello></button-hello>

    HTML 5.1其他新增

    除了这些元素,HTML 5.1还添加了如下新增:

    • <input>元素的type属性新增了monthweek两个值。正如它们名字所表示的那样,它们定义控件将元素的值设置为代表一个月或者一周的字符串。
    • forceSpellcheck()方法加入到HTMLElement接口中,并且允许开发者通过在元素上调用此函数强制用户执行拼写和语法检查,即使用户没有聚焦这个单词。其中一个用途就是inputElement.forceSpellcheck()。不幸的是还没有浏览器支持这个特性。
    • allowfullscreeniframe元素的一个布尔类型属性,它指定了当调用requestFullScreen()方法时,iframe是否接受全屏。当该属性未被指定时,默认元素不接受全屏模式。
    • reportValidity()方法被调用时,强制用户进行<form>元素的约束校验。比如当一个必填元素没有被填写或者一个字段涉及到它的pattern属性时。如果约束的校验返回正确的结果时,这个函数会返回true,反之则返回false。目前有Chrome和Opera支持了这个方法。

    1. 创建一个<canvas>元素,并获取Canvas画布渲染上下文

    图片 5

    < canvas>是一个双标签元素,通过width和height的值来设置画布的大小。至于ctx(画布渲染上下文),可以理解为画布上的画笔,我们可以通过画笔在画布上随心所欲的绘制图案。如果浏览器不支持canvas会直接显示<canvas>标签中间自己设定的文字。当然<canvas>标签中间也可以是一张当不支持canvas时需要替换显示的图片。

     

    2. 使用canvas的图像操作API绘制图像

    绘制图像的关键API及参数说明:

    图片 6

    引用MDN上的一张图会比较清晰的看出每个参数的作用:

    图片 7

    drawImage就是把一个image对象或者canvas上(甚至是video对象上的的每一帧)指定位置和尺寸的图像绘制到当前的画布上。而在我们的需求中,是要把整个图像绘制到画布中。

    图片 8

    对应浏览器看到的效果:

    图片 9

     

    扩展原有元素

    其实,如果我们需要一个按钮,完全不需要重新自定义一个元素,Web Components 标准提供了一种扩展现有标签的方式,把上边的代码调整一下:

    JavaScript

    document.registerElement('button-hello', { prototype: Object.create(HTMLButtonElement.prototype, { createdCallback: { value: function createdCallback() { this.addEventListener('click', () => { alert('hello world') }) } } }), extends: 'button' })

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    document.registerElement('button-hello', {
      prototype: Object.create(HTMLButtonElement.prototype, {
        createdCallback: {
          value: function createdCallback() {
            this.addEventListener('click', () => {
              alert('hello world')
            })
          }
        }
      }),
      extends: 'button'
    })

    然后在 HTML 中要这么使用:

    XHTML

    <button is="button-hello">hello world</button>

    1
    <button is="button-hello">hello world</button>

    使用 is 属性来声明一个扩展的类型,看起来也蛮酷的。生命周期和自定义元素标签的保持一致。

    当我们需要多个标签组合成新的元素时,我们可以使用自定义的元素标签,但是如果只是需要在原有的 HTML 标签上进行扩展的话,使用 is 的这种元素扩展的方式就好。

    原有的 createElementcreateElementNS,在 Web Components 标准中也扩展成为支持元素扩展,例如要创建一个 button-hello

    JavaScript

    const hello = document.createElement('button', 'button-hello')

    1
    const hello = document.createElement('button', 'button-hello')

    标准文档中还有很多细节上的内容,例如接口的参数说明和要求,回调队列的实现要求等,这些更多是对于实现这个标准的浏览器开发者的要求,这里不做详细描述了,内容很多,有兴趣的自行查阅:Cutsom Elements 2016.02.26。

    未定案的特性

    HTML 5.1规范中也描述了一些当前被认为“at risk”的特性。

    我要提的第一个未定案的特性就是<menu>元素。它代表了菜单指令的集合,它原本是被设计用来创建工具栏和弹出菜单的。当下Chrome和Opeara只有在实验性网络平台(Experimental Web Platform features)打开后才能支持,并且只支持context menu,不支持button menu。Firefox的近期版本也是同样,目前的其他浏览器没有可以支持的。

    接下来要介绍的特性是<menuitem>元素,定义了用户可以从弹出菜单中调用的命令。在变种包含了context menu,同时menu可能关联了一个menu button。当下Chrome和Opeara只有在实验性网络平台(Experimental Web Platform features)打开后才能支持,并且只支持type=”command”。在Firefox中也只有当关闭tag后才能支持带有contextmenu属性的<menu>。IE和Edge都没有支持该元素。

    另一个未定案的特性则是<keygen>。这个元素会在控件的表单提交的时候生成一对密钥,私有密钥会存储在本地的keystore中,公有密钥则会被打包发送到服务器。 In addition to these elements, the following features are also considered at risk: 除了上面提到的这些元素,下面这些特性也同样没有确定:

    • <input>元素的typedatatimedatatime-local两个值。前者用来定义一个特定地区的日期和时间,候着则是代表本地日期和时间,没有时区偏移量信息。
    • context属性为<div>指定了一个context menu,并且当用户右键点击div时会显示菜单。所有的浏览器中,只有Firefox支持了这个属性。
    • inputmode属性。它指定了当用户在表格控件中输入内容时,输入机制会提供更多的帮助。

    好了,现在你已经知道了HTML 5.1做了哪些改变,可以进一步了解工作组现在在研究的规范内容了。

    3. 获取图像的像素信息,并根据像素信息重新绘制出粒子效果轮廓图

    canvas有一个叫getImageData的接口,通过该接口可以获取到画布上指定位置的全部像素的数据:

    图片 10

    把获取的imageData输出到控制台可以看到,imageData包含三个属性:

    图片 11

    其中,width、height是读取图像像素信息完整区域的宽度和高度,data是一个Uint8ClampedArray类型的一维数组,包含了整个图片区域里每个像素点的RGBA的整型数据。这里必须要理解这个数组所保存像素信息的排序规则,请看下图描述的data数组:

    图片 12

    每一个色值占据data数组索引的一个位置,一个像素有个4个值(R、G、B、A)占据数组的4个索引位置。根据数列规则可以知道,要获取第n个位置(n从1开始)的R、G、B像素信息就是:Rn = (n-1)*4 ,Gn = (n-1)*4+1 ,Bn = (n-1)*4+2  ,so easy~  当然,实际上图像是一个包括image.height行,image.width列像素的矩形而不是单纯的一行到结束的,这个n值在矩形中要计算下:

    图片 13

    由于一个像素是带有4个索引值(rgba)的,所以拿到图像中第i行第j列的R、G、B、A像素信息就是 Rij = [(j-1)*imageData.width + (i-1)]*4 ,Gij = [(j-1)*imageData.width + (i-1)]*4 + 1,Bij = [(j-1)*imageData.width + (i-1)]*4 + 2,Aij = [(j-1)*imageData.width + (i-1)]*4 + 3 。每个像素值都可以拿到了!

    接下来就要把图像的粒子化轮廓图画出来了。那么,怎么做这个轮廓图呢,我们先读取每个像素的信息(用到上面的计算公式),如果这个像素的色值符合要求,就保存起来,用于绘制在画布上。另外,既然是做成粒子的效果,我们只需要把像素粒子保存一部分,展示在画布上。

    具体做法是,设定每一行和每一列要显示的粒子数,分别是cols和rows,一个粒子代表一个单元格,那么每个单元格的的宽高就是imageWidth/cols和imageHeight/rows,然后循环的判断每个单元格的第一个像素是否满足像素值的条件,如果满足了,就把这个单元格的坐标保存到数组里,用作后续绘制图案用。

    关键参考代码:

    图片 14

    用完整代码做出的demo及效果:

    图片 15

    至此,粒子轮廓图已经制作完成。

     

    和最新版的区别

    前边我提到说文档的更新变化很快,截止至我写这个文章的时候,最新的文档是这个:Custom Elements 2016.07.21。

    细节不做描述了,讲讲我看到的最大变化,就是向 ES6 靠拢。大致有下边三点:

    • 从原本的扩展 prototype 来定义元素调整为建议使用 class extends 的方式
    • 注册自定义元素接口调整,更加方便使用,传入 type 和 class 即可
    • 生命周期回调调整,createdCallback 直接用 class 的 constructor

    前两个点,我们直接看下代码,原本的代码按照新的标准,应该调整为:

    JavaScript

    class ButtonHelloElement extends HTMLButtonElement { constructor() { super() this.addEventListener('click', () => { alert('hello world') }) } } customElements.define('button-hello', ButtonHelloElement, { extends: 'button' })

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ButtonHelloElement extends HTMLButtonElement {
      constructor() {
        super()
     
        this.addEventListener('click', () => {
          alert('hello world')
        })
      }
    }
     
    customElements.define('button-hello', ButtonHelloElement, { extends: 'button' })

    从代码上看会感觉更加 OO,编写上也比原本要显得方便一些,原本的生命周期回调是调整为新的:

    • constructor in class 作用相当于原本的 createdCallback
    • connectedCallback 作用相当于 attachedCallback
    • disconnectedCallback 作用相当于 detachedCallback
    • adoptedCallback 使用 document.adoptNode(node) 时触发
    • attributeChangedCallback 和原本保持一致

    connect 事件和插入元素到 document 有些许区别,主要就是插入元素到 document 时,元素状态会变成 connected,这时会触发 connectedCallback,disconnect 亦是如此。

    HTML 5.2会带来什么

    HTML 5.2规范的制定工作才刚刚开始,所以此时此刻还没办法猜测出很多东西。

    最重要的特性之一就是<script type="module">和对于模块如何分解、获取和评估,这也是制定HTML 5.2将要讨论的一部分。这个特性加入了对于加载JavaScript模块的支持,以及分解、获取、解析、评估模块所必须的依赖。关于这个话题想了解更多的话,可以阅读WHATWG的为Web平台添加JavaScript模块这篇文章。

    另一个开发中的特性就是关于 <meta name="theme-color"> 的定义。它的值可以是包括HEX和RGB在内的任何你在CSS中使用的颜色。一旦页面中如此使用了,只要浏览器和操作系统定制了用户界面,这个新的meta标签就会建议它们使用这个颜色。你可以看到Android端的Chrome浏览器已经像下图这样做出这样的行为。

    图片 16

    对于autocapitalize属性的标准化也在讨论中。当前Safari在IOS上对它的支持由于版本的不同有两种不同的实现。老版本(IOS 5之前)是作为布尔型属性,而新版本则支持不同的值。已经有提案 发布建议以一种独特的方式让所有浏览器支持这个属性。

    最后我想提一下这个关于大纲算法概念的discussion。大纲算法是一种基于节段元素的结构而不是标题的level来提供Web页面大纲的机制。理论上,你可以在一个页面中所有的标题都使用h1,只要把标题放置于正确的节段元素中,就可以创建出结构化文档。然而实际上还没有任何代理实现它,因此在网站中依赖这个算法还是有风险的。

    除了开发新的特性之外,工作组同样致力于使浏览器实现已存在的特性。其中之一就是<input>元素与一个<datalist>元素关联时的行为。

    如果你想了解关于工作组工作重点的其他细节,可以关注这个GitHub issue。

    二、制作粒子动画

    制作粒子动画分两种:

    一种是粒子漂浮类,这种比较简单,只需要随机的改变每个粒子的位置值,然后一直执行setInterval或者requestAnimationFrame重绘画布即可,具体的效果因人喜好而去设定,就不具体讲解了,做了个简单的粒子漂浮的例子。

    另一种是粒子的轨迹动画,这个相对复杂一些。这里要介绍的是每个粒子按照指定的轨迹在指定的时间内做位移,最终汇聚成指定图案的动画效果(也就是文章一开始的动效),要做成这类动画效果需要解决两个问题:一个是动画轨迹,另外一个是每个粒子执行动画的时机。

    本文由金沙国际官网发布于web前端,转载请注明出处:欢迎来到HTML5,是个什么样的东西

    关键词: