《javascript高级程序设计》笔记(十六)

HTML5脚本编程

(一)跨文档消息传递

postMessage():向包含在当前页面的<iframe>元素,或由当前页面弹出的窗口传递数据。

接收两个参数:一条消息和一个表示消息接收方来自哪个域的字符串。

//所有支持XDM的浏览器也支持iframe的contentWindow属性
var iframeWindow = document.getElementById("myframe").contentWindow;
iframeWindow.postMessage("A secret","http://www.worx.com");

接收到XDM消息后会触发window对象的message事件,传递给onmessage处理程序的事件对象包含data(postMessage的第一个参数)、origin(发生消息的文档所在的域)、source(发送消息的文档的window对象的代理)。

收到消息后验证发送窗口的来源是非常重要的。

IE8+、Firefox3.5+、Safari 4+、Opera和Chrome。

(二)原生拖放

1.拖放事件

拖动某元素时,依次触发的事件:dragstart、drag、dragend。

当某个元素被拖到一个有效的放置目标,依次触发:dragenter、dragover、dragleave或drop。

只要元素被拖到放置目标就会触发dragenter事件,紧随其后的是dragover事件,在被拖动的元素还在放置目标的范围内移动时,就会持续触发该事件。如果元素被拖出拖放目标会触发dragleave事件。

2.自定义放置目标

重写dragenter和dragover事件的默认行为,将元素变成有效的放置目标。

            if (event.type == "dropenter" || event.type == "dragover" || event.type=="drop"){
                EventUtil.preventDefault(event);
            }
        }

为了让Firefox 3.5+支持正常的拖放还要取消drop事件的默认行为,阻止它打开URL

  if (event.type=="drop"){
                EventUtil.preventDefault(event);
            }

3.dataTransfer对象

datatransfer 方法:getData()和setData()。

getData()参数:保存数据的类型,取值为"text"或"URL"。

在拖动文本框的文本会调用setData()方法,将拖动的文本以text格式保存在dataTransfer对象。在元素被拖放到放置目标时可以通过getData()读取数据。

IE10及之前版本不支持扩展的MIME类型名,Firefox5之前把Text映射为text/plain。

4.dropEffect与effectAllowed

dropEffect属性:知道被拖放的元素能支持哪种拖放行为。none、move、copy和link。

efectAllowed属性:允许拖放元素的哪种dropEffect。

必须在ondragstart事件处理程序中设置effectAllowed属性。

5.可拖动

draggable属性:元素释放可以拖动。图像和链接被自动设置为true,其他元素都是false。

IE 10+、Firefox 4+、Safari 5+和Chrome。

6.其他成员

(三)媒体元素

<audio>和<video>

可以指定多个不同的媒体来源

<!-- 嵌入视频 -->
<video id="myVideo">
    <source src="*.webm" type="video/webm"; codecs=‘vp8, vorbis‘">
    <source src="*.ogv" type="video/ogg"; codecs=‘theora,vorbis" ">
    <source src="conference.mpg">
    Video player not avaliable.
</video>

<!-- 嵌入音频 -->
<audio id="myAudio">
      <source src="*.ogg" type="audio/ogg">
      <source src="*.mp3" type="audio/mpeg">
      Audio player not avaliable.
</audio>

IE9+、Firefox 3.5+、Safari 4+、Opera 10.5+、Chrome。

1.属性

2.事件

3.自定义媒体播放器

使用play()和pause()方法。

            //为按钮添加事件处理程序
            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); 

4.检测编解码器的支持情况

canPlayType():接收一种格式/编解码器字符串,返回"probably"、"maybe"或""。如果传入MIME类型返回值可能是"maybe"或空字符串。

5.Audio类型

<audio>有一个构造函数Audio,可以在任何时候播放音频。

(四)历史状态管理

hashchage事件可以知道URL的参数什么时候发生了变化。

history.pushState()  接收三个参数:状态对象、新状态的标题和可选的相对URL。

执行pushState()后,新的状态信息会被加入历史状态栈,浏览器地址变成新的相对URL。

要更新当前状态,可以调用replaceState(),传入与pushState()的前两个参数。

Firefox 4+、Safari 5+、Opera 11.5+和Chrome。

时间: 2024-11-06 15:31:23

《javascript高级程序设计》笔记(十六)的相关文章

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

《javascript高级程序设计》第六章总结

6.1 理解对象 属性类型 属性特性 行为描述 数据属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 数据属性 Enumerable 表示能否通过for-in循环返回属性.对于直接在对象中定义的属性,默认为true 数据属性 Writable 表示是否可以修改属性的值. 数据属性 value 表示这个属性的内部值. 访问器属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 访问器属性 Enumerable 表示能否通过for-

javascript高级程序设计笔记1

最近在看javascript高级程序设计,看之前觉得自己的js学得还不错,然后,看了没几页就觉得自己好像没有学过一样,这主要写写我以前不完全了解的一些知识. 首先是关于基本数据类型的,从Number开始,以前经常用parseInt来转换数值,看过书才知道,这个函数的本意是专门用于把字符串转换成数值,而且以前也不知道它具体是怎么一个转换规则.先来看看Number()函数的转换规则: 1.如果是Boolean 值,true 和false 将分别被转换为1 和0.2.如果是数字值,只是简单的传入和返回

【javascript高级程序设计笔记】第一章与第三章

第1章 javascript简介 1.2Javascript实现 一个完整的javascript实现由下列三个不同的部分组成 核心(ECMAScript) 提供核心语言功能 文档对象模型(DOM) 提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM)提供与浏览器交互的方法和接口 ECMAScript 它规定了这门语言的下列组成部分: 语法  类型  语句  关键字 保留字 操作符 对象 ECMA-262第5版,发布于2009年. 文档对象模型(DOM) Document Object M

【javascript高级程序设计笔记】第六章OOP

忙了一段时间,加了将近一个月的班. 书也落下没看,上次看到第七章(这部分笔记大概还是9月份的吧),偶尔看到很吃力.看的速度慢下来. 学习就是一个慢慢积累慢慢沉淀的过程.看书时没有明显觉得提升.但在看完书后近段时间工作中写代码,明显感觉效率还是有提升,基础知识牢固了. 这本书是第二次看,这次很认真的遍读和做笔记,笔记的文字均是自己边看边敲的,这样才更好的真正的吸收到一部分吧! 这些天在看web响应式设计:HTML5和CSS3实战 第6章 面向对像的程序设计 6.1.1属性类型 ECMAScript

《Javascript高级程序设计》第六章笔记整理

一.创建对象的方法(6种) 1.工厂模式 即用函数来封装以特定接口创建对象的细节. function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); } return o; } var person1 = createPerson('Lily',17,'Teacher'); var

javascript高级程序设计笔记(第5章 引用类型)

1.Object类型 两种方式定义:对象字面量.new 两种方式访问:括号.点 2.Array类型 2.1  定义方式:new Array.数组字面量 2.2  lenght属性:可以利用它方便的想数组末尾添加元素 2.3  检测数组 instanceof isArray()方法  2.4  toString().soLocaleString().valueOf().join()方法 2.5.栈方法   push()方法:逐个添加到数组末尾,并返回修改后的数组长度 pop()方法:返回数组的最后

JavaScript高级程序设计笔记之面向对象

说起面向对象,大部分程序员首先会想到 类 .通过类可以创建许多具有共同属性以及方法的实例或者说对象.但是JavaScript并没有类的概念,而且在JavaScript中几乎一切皆对象,问题来了,JavaScript中如何面向对象? JavaScript中将对象定义为:一组无序的 键值对的集合,属性以及方法的名称就是键,键的值可以是任何类型(字符串,数字,函数--) 在JavaScript中,所有对象继承自Object,所有对象继承自Object,所有对象继承自Object! 创建 1  简单创建

javascript高级程序设计笔记(第7章 函数表达式)

7.5 小结 在JavaScript 编程中,函数表达式是一种非常有用的技术.使用函数表达式可以无须对函数命名,从而实现动态编程.匿名函数,也称为拉姆达函数,是一种使用JavaScript 函数的强大方式.以下总结了函数表达式的特点.? 函数表达式不同于函数声明.函数声明要求有名字,但函数表达式不需要.没有名字的函数表达式也叫做匿名函数.? 在无法确定如何引用函数的情况下,递归函数就会变得比较复杂:? 递归函数应该始终使用arguments.callee 来递归地调用自身,不要使用函数名——函数