一、原生拖放

  最早在网页中引入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高级程序设计》原生拖放和媒体元素的更多相关文章

  1. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  2. 《JavaScript高级程序设计》学习笔记(4)——引用类型

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...

  3. 《JavaScript高级程序设计》学习笔记

    系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...

  4. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  5. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  6. 赠书《JavaScript高级程序设计(第三版)》5本

    本站微博上正在送书<JavaScript高级程序设计>走过路过的不要错过,参与方式,关注本站及简寻网+转发微博:http://weibo.com/1748018491/DoCtp6B8r ...

  7. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  8. 读书笔记(03) - 性能 - JavaScript高级程序设计

    作用域链查找 作用域链的查找是逐层向上查找.查找的层次越多,速度越慢.随着硬件性能的提升和浏览器引擎的优化,这个慢我们基本可以忽略. 除了层级查找损耗的问题,变量的修改应只在局部环境进行,尽量避免在局 ...

  9. 《Javascript高级程序设计》阅读记录(二):第四章

    这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...

随机推荐

  1. CDOJ 1271 Search gold

    简单DP.dp[i][j]表示走到这格的最大金钱数. #include<cstdio> #include<cstring> #include<cmath> #inc ...

  2. (译)Windsor入门教程---第二部分 引用Windsor

    原文:http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx ...

  3. 解决SSh连接过慢

    ssh 连接的时候特别慢 解决方法: 修改配置文件 /etc/ssh/sshd_config GSSAPIAuthentication yes --->no 81行左右 #UseDNS yes ...

  4. Mac上ssh无法登录的问题

    今天起来发现阿里云ssh无法登录了 出现一条警告: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 开始打算清理know_hosts发现失败,清了根本 ...

  5. brew udpate出现错误“/usr/local is not writable.”的问题解决

    如图所示: 在命令行输入: sudo chown -R 当前登录的用户名 /usr/local 再次输入: brew update 问题解决.

  6. The account '...' is no team with ID '...'

    iOS升到9.2之后,有一个大坑,原先真机调试的开发者账号(未付费),连不了Xcode了,会弹出一个提示框提示你, The account '...' is no team with ID '...' ...

  7. C++的封装性

    C++的封装性 C++的阶段,我想根据C++的一些特有的特性分别写一些专题,每个专题我都捎带讲一些语法,当然不会很多,我还是会像C语言那样,内存结构贯穿始终,有汇编就有真相…… 本专题,我们讲述封装性 ...

  8. ios数据存储——数据库:SQlite3以及第三方库FMDB

    [reference]http://blog.csdn.net/mad1989/article/details/9322307 原生数据库:SQlite3 一.必备条件 在ios项目中使用sqlite ...

  9. leetcode day7

    这道题弄的心好累..  [Reverse Linked List]206 描述: Reverse a singly linked list. click to show more hints. Hin ...

  10. iOS 导航栏不可点击

    self.navigationController.navigationBar.userInteractionEnabled = NO;