HTML5脚本编程

一.跨文档消息传递:cross-document messaging 简XDM  。

1.它的核心是postMessage()方法:目的是向另一个地方传递数据,对于XDM而言,“另一个地方”指的是包含在当前页面中的<iframe>元素,或者由当前页面弹出的窗口。

2.postMessage()方法接收两个参数:一条消息和一个表示消息接收方来自哪个域的字符串,第二个参数对保障安全通信非常重要,可以防止浏览器把消息发送到不安全的地方。

 

3.支持XDM的浏览器有IE8+ Firefox3.5+ Safari4+ Opera Chrome ios版Safari 以及Android版WebKit

二.原生拖放

1.拖动某元素将以此触发下列事件dragstart drag dragend

2.当某个元素被拖动到一个有效的放置目标上时,下列事件会依次发生:dragenter dragover dragleave或drop.只要有元素被拖动到放置目标上,就会触发dragenter事件,紧随其后的是dragover事件.而且在被拖动的元素还在放置目标的范围内移动时,就会持续触发该事件。如果元素被拖出了放置目标,dragover事件不再发生,但会触发dragleave事件。如果元素被拖放到了放置目标中,则会触发drop事件而不是dragleave事件。

3.在拖动元素经过某些无效放置目标时,可以看到一种特殊的光标,表示不能放置,虽然所有元素都支持放置目标事件,但这些元素默认是不允许放置的。如果拖动元素经过不允许放置的元素,无论用户如何操作,都不会发生drop事件。不过可以通过下面方法吧任何元素都变成有效放置目标:就是重写dragenter和dragover事件的默认行为。例如,假设有一个ID为“droptarget”的div元素,可以用下面代码将它变成一个放置目标。如下

var droptarget = document.getElementById("droptarget");

EventUtil.addHandler(droptarget, "dragover", function(event){
    EventUtil.preventDefault(event);
});

EventUtil.addHandler(droptarget, "dragenter", function(event){
    EventUtil.preventDefault(event);
});

以上代码执行后,光标变成了允许放置的的符号,也就可以触发drop事件了。

而在Firefox3.5+中,放置事件的默认行为是打开被放到放置目标上的URL。也就是说,如果是把图像拖放到放置目标上,页面会转向图像文件;而如果是把文本拖放到放置目标上,则会导致无效URL错误,因此为了让Firefox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL:

EventUtil.addHandler(droptarget, "drop", function(event){
    EventUtil.preventDefault(event);
});

5.dataTransfer对象:它是事件对象的一个属性,用于从被拖动元素放置目标传递字符串格式的数据 。它主要有两个方法:getData()和setData()访问的时候如下 :

event.dataTransfer.setData("text", "some text");
var text = event.dataTransfer.getData("text");

在拖动文本框的文本时,浏览器会调用setData()方法,将拖动的文本以"text"格式保存在dataTransfer对象中.类似地,在拖放链接或图像时,会调用setData() 方法并保存URL,然后,在这些元素被拖放到放置目标时,通过getData()读到这些数据。 也可以再dragstart事件处理程序中调用setData(),手工保存自己要传输的数据,以便将来使用。

Firefox在其第五个版本之前不能正确地将“url”和“text”映射为“text/uri-list” 和“text/plain”.但是却能把"Text"映射为“text/plain”. 为了更好地在跨浏览器的情况下从dataTransfer对象取得数据,最好在取得URL数据时检测两个值,而在取得文本数据时使用“Text”.

var dataTransfer = event.dataTransfer;

//读取URL

var url = dataTransfer.getData("url") || dataTransfer.getData("text/uri-list");

//读取文本

var text = dataTransfer.getData("Text");

4.dropEffect和effectAllowed属性

三媒体元素HTML5新增了两个与媒体相关的标签分别是视频<audio>和音频<video>

首先是<video>简易播放MP3的代码


<script>
var EventUtil = {
    //addHandler方法有3个参数:要操作的元素、事件名称和时间处理程序函数
    //addHandler方法的作用是添加时间处理程序
    addHandler : function(element,type,handler){
        if (element.addEventListener){
            element.addEventListener(type , handler, false);    
        } else if (element.attachEvent){
            element.attachEvent("on"+type, handler);
        } else {
            element["on" + type] = handler;
        }
    }
};
</script>
<body>
<div class="mediaplayer">
   <div class="video">
       <video id="player" src="f(x)-La Cha Ta.mp3" poster="mymovie.jpg" width="300" height="200">
          video player not available
       </video>
   </div>
   <div class="controls">
       <input type="button"  value="play" id="video-btn" />
       <span id="curtime"> 0</span>/<span id="duration">0</span>
   </div>
</div>
<script>
var player  = document.getElementById("player"),
    btn     = document.getElementById("video-btn"),
    curtime = document.getElementById("curtime"),
    duration= document.getElementById("duration");

//更新播放时间
duration.innerHTML = player.duration;

//为按钮添加事件处理程序
EventUtil.addHandler(btn, "click", function(event){
    if(player.paused){
       player.play();
       btn.value = "Pause";
    } else {
       player.pause();
       btn.value = "Play";
    }
});

//定时更新当前时间
setInterval(function(){
    curtime.innerHTML = player.currentTime;
},250);
</script>
</body>

posted @ 2012-08-21 15:12  陆航  阅读(739)  评论(0编辑  收藏  举报