最近自己在重新学习html5新特性,了解到有视频标签和拖动标签,于是自己用这两个特性写了一个小demo,主要功能就是可以通过拖动视频来直接播放。效果图如下:

  

  页面使用了<video>标签和drag,drop方法。左侧是动态渲染的视频列表,里面title包含着视频路径信息,右侧是视频播放器。

  js代码:

        // 拖拽开始
function dragStart() {
let e = window.event;
e.dataTransfer.setData('video', e.target.title);
}
// 拖拽结束
function dragover() {
window.event.preventDefault();
}
// 拖拽结束放置
function drop() {
let e = window.event;
e.preventDefault();
// 获取到事件
let src = e.dataTransfer.getData('video');
document.getElementById(e.target.id).src = src;
}
// 页面加载完成渲染歌曲列表
var COUNT = 8;
window.onload = () => {
let innerHtml = '', src = '', name = '';
for (let i = 0; i < COUNT; i++) {
name = 'shipin(' + (i + 1) + ')';//拼接视频名称
src = 'static/shipin(' + (i + 1) + ').mp4';//拼接视频路径
innerHtml += `<li title=${src} draggable=${true} id='drag${i}' ondragstart=javascript:dragStart()>${name}</li>`
}
document.getElementById('ul').innerHTML = innerHtml;
}

  如上,定义了拖拽开始函数dragstart(),用于处理左侧被拖动元素的ondragstart事件,该函数把e.target.title保存起来,title就是被拖动视频的路径。然后是dragover()函数,用于拖动结束后阻止默认的事件,以便被拖动的元素能放置在video标签中。然后是drop()函数,用于video标签,即被放置元素中,该函数在放置时候执行,拖动结束后将会用getData获取之前保存起来的title路径,然后利用gerElementById.src把路径赋值给video标签。实现视频的拖动播放。  

页面代码:

    <div class="main">
<!-- 左侧视频数据列表 -->
<div class="aside">
<ul id="ul"></ul>
</div>
<!-- 右侧播放器 -->
<div class="play">
<video id="video" ondrop="drop()" ondragover="dragover()" src="" controls="controls" autoplay='autoplay'></video>
</div>
</div>

  主要难点:

  1.如何在动态拼接的多个li标签中调用定义的dragstart函数,这里使用了语句:ondragstart=javascript:dragStart()。

  2.如何获取li的event对象,这里没有直接把event作为对象从dragstart方法传过去,会报错,而是在函数中通过window.event获得该事件对象。

html5.0学习记录(一)——可拖动视频播放器的更多相关文章

  1. Effective Objective-C 2.0 学习记录

    由于最近入职,公司安排自由学习,于是有时间将Effective Objective-C 2.0一书学习了一遍.由于个人知识面较窄,对于书中有些内容无法理解透彻,现将所学所理解内容做一遍梳理,将个人认为 ...

  2. tempo 2.0 学习记录

    最近在做项目时使用了tempo,感觉还不错,但是发现网上对于tempo 2.0 的介绍比较少,我也是在GitHub才找到了比较完整的使用说明,我也简单记录一下自己的使用过程,重新学习一下tempo 2 ...

  3. .net core 2.0学习记录(三):内置IOC与DI的使用

    本篇的话介绍下IOC和ID的含义以及如何使用.Net Core中的DI. 一.我是这么理解IOC和DI的: IOC:没有用IOC之前是直接new实例来赋值,使用IOC之后是通过在运行的时候根据配置来实 ...

  4. webpack4.0学习记录

    2019/04/28 1.本质上,webpack基于node  node跟webpack为最新稳定版,才能更好,更快的打包 安装 1.卸载node  直接在控制面板  卸载 2.安装 从官网下载 然后 ...

  5. .net core 2.0学习记录(四):Middleware使用以及模拟构建Middleware(RequestDelegate)管道

    .net Core中没有继续沿用以前asp.net中的管道事件,而是开发了一个新的管道(Middleware): public class MiddlewareDemo { private reado ...

  6. .net core 2.0学习记录(一):搭建一个.Net Core网站项目

    .Net Core开发可以使用Visual Studio 2017或者Visual Studio Code,下面使用Visual Studio 2017搭建一个.net Core MVC网站项目. 一 ...

  7. Spark2.0学习记录

    Hadoop与Spark的关系: ------------------- Spark 与mapReduce的区别: mapReduce和spark的内存结构: -------------------  ...

  8. libgdx学习记录16——资源加载器AssetManager

    AssetManager用于对游戏中的资源进行加载.当游戏中资源(图片.背景音乐等)较大时,加载时会需要较长时间,可能会阻塞渲染线程,使用AssetManager可以解决此类问题. 主要优点: 1. ...

  9. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

随机推荐

  1. Quicklz压缩算法

    以前对压缩算法一无所知,只是知道哈弗曼编码能做这种事情,但是感觉这样的方法奇慢无比.昨天下午看了下号称世界上最快的压缩算法Quicklz,对压缩的基本思路有了一定的了解.一般的压缩程序的要求读入文件之 ...

  2. bzoj 4398 福慧双修——二进制分组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...

  3. linux 中的局部变量、全局变量、shell 变量的总结

    系统局部变量和全局变量  一.变量分类局部变量和环境变量,局部变量只适用于当前shell,而环境变量是全局的,它适用于所有当前shell以及其派生出来的任意子进程,有些变量是用户创建的,其他的则是专用 ...

  4. 编写 DockerFile

    编写 DockerFile 本节内容简介 在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: ...

  5. 1.Win7中判断当前端口是否被占用

    以Win7为例,可以用如下方法找出某个端口是否被其他进程占用:netstat -aon|findstr "8081" 发现8081端口被PID为5900的进程占用, tasklis ...

  6. js事件触发器fireEvent和dispatchEvent

    转自:https://www.cnblogs.com/tiger95/p/6962059.html 事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome, ...

  7. Levko and Array

    题意: 有一长度为n的正整数序列,你可以选择K个数字任意改变它,使得$max \{ a(i+1) - a(i) \} $ 最小,求最小值. 解法: 1.$O(n^2log(MAX_A) )$,考虑二分 ...

  8. CodeForces 1098F. Ж-function

    题目简述:给定字符串$s[1 \dots n](n \leq 2 \times 10^5)$,以及$Q \leq 2 \times 10^5$个询问,每个询问有两个参数$1 \leq l \leq r ...

  9. junit4 Assert静态方法及API

    junit中的assert方法全部放在Assert类中. 1.assertTrue/False([String message,]boolean condition);    用来查看变量是是否为fa ...

  10. 启动Android模拟器问题集锦

    1.新建AVD时,报错“no CPU/ABI system image available for this target”, 解决:在SDK Manager中下载System Image 2.Sys ...