《JAVASCRIPT高级程序设计》原生拖放和媒体元素
一、原生拖放
最早在网页中引入javascript拖放功能的是IE4,当时,网页中只有两种对象可以拖放:图像和某些文本。而现在,几乎网页中的任何元素都可以拖放以及作为放置目标。下面介绍一些与拖放相关的内容:
1、拖放事件
在拖放事件中,将依次在被拖动的元素和作为放置目标的元素上触发3个事件:
被拖动的元素:dragstart----drag----dragend
作为放置目标的元素:dragenter----dragover---dragleave(元素被拖出了目标)或drop(元素被放到了放置目标中)
2、自定义放置目标
在拖动元素经过某些无效的放置目标时,可以看到一种特殊的光标(圆环中有一条反斜线),表示不能放置。通过重写dragenter和dragover事件的默认行为,以及取消drop事件的默认行为(在firefox),可以支持任意元素成为放置目标。
var droptarget = document.getElementById("droptarget");
// 阻止dragover的默认行为
EventUtil.addHandler(droptarget, "dragover", function(event){
EventUtil.preventDefault(event);
});
// 阻止dragenter的默认行为
EventUtil.addHandler(droptarget, "dragenter", function(event){
EventUtil.preventDefault(event);
});
// 阻止drop的默认行为
EventUtil.addHandler(droptarget, "drop", function(event){
EventUtil.preventDefault(event);
});
3、dataTransfer对象
只是简单的拖放而没有数据变化是没有什么用处的。为了在拖放操作时,实现数据交换,ie5实现了dataTransfer对象,它有setData()和getData()两个方法。例如当拖动某个文本时,浏览器会调用setData方法,将拖动的文本以“text”格式保存在dataTransfer对象中;当元素被拖放到放置目标时,通过getData()读取数据。
// 设置和接受文本数据
event.dataTransfer.setData("text", "some text");
var text = event.dataTransfer.getData("text");
// 设置和接受URL
// 将数据保存成URL格式,浏览器会将其当成网页中的链接
event.dataTransfer.setData("URL", "http://www.baidu.com");
var url = event.dataTransfer.getData("URL");
4、dropEffect和effectAllowed
dataTransfer对象具有dropEffect和effectAllowed两个属性,通过它们可以确定被拖动的元素以及作为放置目标的元素能够接收什么操作。


5、可拖动
默认情况下,只有图像、链接和文本是可拖动的。对于其他元素,添加属性draggable="false", 则让其不可拖动;添加属性draggable="true", 则可拖动。
二、媒体元素
1、页面中嵌入媒体元素
HTML5新增了<audio>和<video>标签,使不必依赖任何插件就能在网页中嵌入跨浏览器的音频是视频内容。这两个标签页提供了很多事件和属性,来提供媒体当前状态的信息。
<!-- 嵌入视频-->
<video id="myVideo">
<!-- 并非所有的浏览器都支持所有的格式,因此可以指定多个不同的媒体来源 -->
<source scr="1.webm" type="video/webm; codecs='vp8, vorbis'">
<source scr="2.ogv" type="video/ogg; codecs='theora, vorbis'">
<source scr="3.mpg">
<!-- 开始和结束标签的内容属于后备内容,在浏览器不支持这两个媒体元素的时候显示 -->
Video player not available.
</video>
<!-- 嵌入音频 -->
<audio id="myAudio">
<source scr="song1.ogg" type="audio.ogg">
<source scr="song2.mp3" type="audio.mpeg">
Audio player not available.
</audio>
2、自定义媒体播放器
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>自定义媒体播放器</title>
</head>
<body>
<div class="mediaPlayer">
<div class="video">
<video src="1.mp4" id="player" poster="image1.png" 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");
// 为按钮添加时间处理程序,这里使用的是DOM2级事件处理程序,不支持IE
btn.addEventListener("click", function(){
if(player.paused){
player.play();
btn.value = "pause";
}else{
player.pause();
btn.value = "play";
}
},false);
// 定时更新时间
setInterval(function(){
curtime.innerHTML = player.currentTime;
duration.innerHTML=player.duration;
},250);
</script>
</body>
</html>
《JAVASCRIPT高级程序设计》原生拖放和媒体元素的更多相关文章
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- 《JavaScript高级程序设计》学习笔记(4)——引用类型
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...
- 《JavaScript高级程序设计》学习笔记
系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...
- JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...
- 读书时间《JavaScript高级程序设计》一:基础篇
第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...
- 赠书《JavaScript高级程序设计(第三版)》5本
本站微博上正在送书<JavaScript高级程序设计>走过路过的不要错过,参与方式,关注本站及简寻网+转发微博:http://weibo.com/1748018491/DoCtp6B8r ...
- JavaScript高级程序设计学习(三)之变量、作用域和内存问题
这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...
- 读书笔记(03) - 性能 - JavaScript高级程序设计
作用域链查找 作用域链的查找是逐层向上查找.查找的层次越多,速度越慢.随着硬件性能的提升和浏览器引擎的优化,这个慢我们基本可以忽略. 除了层级查找损耗的问题,变量的修改应只在局部环境进行,尽量避免在局 ...
- 《Javascript高级程序设计》阅读记录(二):第四章
这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...
随机推荐
- BP神经网络的Java实现
http://fantasticinblur.iteye.com/blog/1465497
- iOS常用宏定义
转发:https://www.douban.com/note/486674206/ #ifndef MacroDefinition_h#define MacroDefinition_h //----- ...
- ReactiveNative学习之Diff算法
React 源码剖析系列 - 不可思议的 react diff深入浅出React(四):虚拟DOM Diff算法解析React diff 算法总结链接引用的文章React出于性能的考虑,为了避免频繁操 ...
- JOSN反串行化
JOSN编码的数据可以使用eval函数生产操作的类型. <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC " ...
- Android线程之Thread 、Runnable 的两个例子
Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...
- Góra urządzenia z dwoma zwiększyć moc może sprawić
Zaprojektowany z rzeczywistym komfortu i łatwości od sportowca w swoim umyśle, kolejna edycja ze wzr ...
- BZOJ 1257 [CQOI2007]余数之和sum ——Dirichlet积
[题目分析] 卷积很好玩啊. [代码] #include <cstdio> #include <cstring> #include <cmath> #include ...
- NSString总结
[from]http://www.jianshu.com/p/7994b0ad6b88 问题:NSString到底是不是字符串? NSString 是 OC中专门处理字符串的对象!提供了转换大小写,拼 ...
- java学习(二)--excel导出
public static String writeFile(String fileName, String[][] content) { WritableWorkbook wwb = null; S ...
- paper资料
1.Ycbcr RGB空间转换 :http://www.cnblogs.com/Imageshop/archive/2013/02/14/2911309.html 2.抠图:http://www.c ...