《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高级程序设计>之后,感觉讲的比较 ...
随机推荐
- sed基本用法
sed命令基本用法sed是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量.来自管道的文本等等.sed从文本的一个文本行或标准输入中读取 ...
- tp框架 使用ajax
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- 转:css中overflow:hidden 不起作用了吗?
css中overflow:hidden 不起作用了吗? 有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗?其实看似 ...
- .NET反射
反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...
- CABasicAnimation 基本动画 分类: ios技术 2015-07-16 17:10 132人阅读 评论(0) 收藏
几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...
- 【转】 谈谈C++中的swap函数
1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...
- UILabel常用属性小结
标签常用的属性: (1)frame属性:设置标签的位置与大小. frame = CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat heig ...
- java基础(一)面向对象
对象就是事物存在的实体,例如:人类,计算机等:而对象被分为两个部分,既动态与静态 类:就是同一事物的统称,如果将世界中的一个事物抽象成对象,类就是这类对象的统称,具有相同特性和行为的一类事物就是类. ...
- AtCoder Beginner Contest 052 ABCD题
A - Two Rectangles Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement The ...
- ubuntu 16.04 php 安装curl方法
先查看自己的php是否已经安装了curl.方法如下:1.在web服务器目录( Ubuntu下的通常为 /var/www )新建test.php文件2.编辑文件,键入下面一行代码:<?php ph ...