zoukankan      html  css  js  c++  java
  • HTML5 脚本

    1.跨文本消息传递

    跨文本消息传递是指来自不同的域之间的页面相互传递消息,他的核心是postMessage()方法,即向另一个地方传递数据。对于psotMessage而言,另一个地方可以是页面中的iframe或者由当前页面弹出的窗口。它接受两个参数,一个消息和一个表示消息接收方来自哪个域,如下代码:

    1 var iframeWin = document.getElementById('myFrame').contentWindow;
    2 iframeWin.postMessage('some message','http://www.cy.com');

    这里尝试着向页面中的框架传输消息,消息的内容为some message ,而且框架的文档必须来自于http://www.cy.com,不然postMessage什么都不会做。第二个参数可以设置为*,这样就可以向任何来源的框架发送消息。

    在myFrame中,接受到message后,会激发window的message事件,通过对onmessage处理程序进行设置,就可以操作传递过来的message了,onmessage的事件对象主要包含三个重要信息,分别如下:

            data: 作为postMessage第一个参数传入的字符串数据

            origin: 发送消息的文档所在的域

            source:发送消息的文档的window对象的代理

    接受消息后首先应该验证消息来源的准确性,即判断origin是否是安全的,再根据传递过来的消息进行改变页面。

    1 window.addEventListener('message',function(event){
    2     if(event.origin == 'http://www.cy.com'){
    3         console.log(event.data);
    4         event.source.postMessage('received!','http://www.cy1.com');
    5     }
    6 },false);

    这样,有了跨文档消息传递后,就可以安全的向iframe中传递信息了。

    2.原生拖放

    HTML5以IE实例为基础制定了拖放的规范,firefox,safari和chrome都实现了拖放的支持。对于拖放这个行为,只要从被拖放元素和防止目标两方面进行考虑

    2.1 被拖放元素

        在拖放元素师,被拖放元素会发生一系列事件,这些事件依次发生,触发事件如下:

            dragstart

            drag

            dragend

       在鼠标按住被拖放元素并移动时,触发dragstart事件,在拖放过程中,会不断触发drag事件,这个就像是mouseover一样,在拖动停止时,即放掉按住的左键,就会触发dragend事件。同时,要使元素可以被拖动,要对元素设置一个draggable属性,表示元素是否可以拖动。对其设置为ture,就可以支持拖动了。另外,要使firefox支持可拖动属性,必须添加一个dragstart事件处理,并在dataTransfer对象中保存一些信息。

    2.2 放置目标

        当拖动元素到某个有效的放置目标上时,下列事件会依次发生:

             dragenter

             dragover

             dragleave或drop

        只要拖动元素进入放置目标区域时,就会激发dragenter事件,在放置目标内部移动时,就会不断激发dragover,类似mouseover,最后在目标中放下被拖动元素时,激发drop事件,拖动元素离开放置目标时,激发dragleave。

        所有元素都可成为放置目标区域,当时默认设置都是不可放置区域,所以元素拖动时会产生一个不可放置的光标。要想一个区域成为可放置的目标区域,就必须重写dragenter和dragover,示例如下:

     1 var target = document.getElementById('target');
     2 target.addEventListener('dragenter',function(event){
     3       console.log('enter');
     4       event.dataTransfer.dropEffect = 'move';
     5       event.preventDefault();
     6 },false);
     7 target.addEventListener('dragover',function(event){
     8       console.log('over');
     9       event.preventDefault();
    10 },false);

    通过重写,就可以发现光标变成了可放置的形状。

         对于event.preventDefault(),是因为有些浏览器中对于拖放的默认行为时打开放置目标上的URL,即拖放图片时会使页面转向图片。所以通过event.preventDefault()来阻止其发生,所以同时还要取消drop中的默认行为,阻止打开URL。

    1 target.addEventListener('drop',function(event){
    2        console.log('drop');
    3        event.preventDefault();
    4 },false);

    3.媒体元素

         这里指的媒体元素就是video和audio了,通过这两个标签,可以快速的插入要播放的媒体,同时可以用js进行快捷的控制。由于浏览器并不是支持所有的播放格式,所以可以用source标签,让浏览器自主选择可播放的格式。

    <video id="myVideo">
            <source src='./conference.webm' type="video.webm;codecs='vp8, vorbis'">
            <source src='conference.mpg'>
    </video>

        video和audio都提供了一系列js接口,并有许多有用的方法,特别是play(),pause(),他们可以快捷的控制video和audio的播放和暂停。

        在js中,有一个原生的构造函数Audio,可以在任何时候播放音频。Audio和Image很相似,但是Audio可以在未插入到dom时就可以播放,只要传入音频文件就可以了。

    1 var audio = new Audio('http://music.baidu.com/data/music/file?link=http://zhangmenshiting.baidu.com/data2/music/110083207/110076181219600128.mp3?xcode=7bac81081ab4c774f241b9edd617bbdba38a0832de3e1534&song_id=110076181');
    2 audio.addEventListener('canplaythrough',function(){
    3     audio.play();
    4 },false);

     4.历史状态管理

         HTML5通过更新history对象为历史状态管理提供了方便,通过history.pushState()方法,可以在不加载新页面的情况下改变浏览器的URL,并将新的状态信息加入历史状态栈。它需要传入三个参数,分别是状态对象,新状态标题和可选的相对URL。

    history.pushState({foo:'bar'},'canvas','canvas.html')

    同时,要更新当前状态,可以使用replaceState,传入的参数和pushState相同,它可以重写当前状态,而不会新增状态。

    以下是以上几个例子的综合,最后一个历史状态管理在本地运行时由于无法验证origin,会报错无法运行,要放到某个域下跑才可以

    <html>
    <head>
        <script type="text/javascript" id="sc">
            window.onload = function(){
                var target = document.getElementById('target');
                target.addEventListener('dragenter',function(event){
                    console.log('enter');
                    event.dataTransfer.dropEffect = 'move';
                    event.preventDefault();
                },false);
                target.addEventListener('dragover',function(event){
                    console.log('over');
                    event.preventDefault();
                },false);
                target.addEventListener('dragleave',function(event){
                    console.log('dragleave');
                },false);
                target.addEventListener('drop',function(event){
                    console.log('drop');
                    console.log(event.dataTransfer.getData('text'))
                    event.preventDefault();
                },false);
                var source = document.getElementById('source');
                source.addEventListener('dragstart',function(event){
                    console.log('dragstart');
                    event.dataTransfer.setData('text','www.baidu.com');
                    event.dataTransfer.effectAllowed = 'all';
                },false);
                source.addEventListener('dragend',function(event){
                    console.log('dragend');
                },false);
                var audio = new Audio('http://music.baidu.com/data/music/file?link=http://zhangmenshiting.baidu.com/data2/music/110083207/110076181219600128.mp3?xcode=7bac81081ab4c774f241b9edd617bbdba38a0832de3e1534&song_id=110076181');
                audio.addEventListener('canplaythrough',function(){
                    audio.play();
                },false);
            }
            function openWindow(){
                var win = window.open();
                win.document.body.innerHTML = document.body.innerHTML;
                win.document.head.title = 'a';
                var script = win.document.createElement('script');
                script.type = "text/javascript";
                script.text = "var audio = new Audio('http://music.baidu.com/data/music/file?link=http://zhangmenshiting.baidu.com/data2/music/110083207/110076181219600128.mp3?xcode=7bac81081ab4c774f241b9edd617bbdba38a0832de3e1534&song_id=110076181');audio.addEventListener('canplaythrough',function(){audio.play();},false);";
                win.document.head.appendChild(script);
            }
            function hisPush(){
                history.pushState({foo:'bar'},'canvas','canvas.html')
            }
        </script>
    </head>
    <body>
        <div id="target" style="400px;height:400px;border:1px solid red;"></div>
        <div id='source' style="50px;height:50px;background:red;" draggable=true></div>
        <input type="button" value="open new window" onclick="openWindow()"/>
        <input type="button" value="history" onclick="hisPush()"/>
    </body>
    </html>
  • 相关阅读:
    k8s-存储-volume
    k8s-存储-configmap
    k8s-集群调度
    k8s-常用命令
    k8s-资源限制
    k8s-更改证书时间
    kubeadmin安装k8s
    CCPC-Wannafly Winter Camp Day7 D---二次函数【数论】【构造】
    洛谷P1219 八皇后【dfs】
    2019寒假计数器
  • 原文地址:https://www.cnblogs.com/cyITtech/p/3552499.html
Copyright © 2011-2022 走看看