html多媒体
video与audio两个多媒体标签基本上使用方法一样,没有什么太大的区别。
<video src="statics/.mp4"
muted 静音
autoplay 自动播放
loop 循环
constrols 控制面板
></video>
oVideo
.play() 播放
.pause() 暂停
.volume 音量
.muted 静音
.currentTime 当前播放的时间
.duration 已经播放的时间
.onended 播放结束
.ontimeupdate 返回当前播放的进度
.webkitRequestFullscreen()全屏 chrome
.mozRequestFullScreen()全屏 Firefox
音乐播放器代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
li{
cursor: pointer;
}
li:hover{
color: grey
}
li.active{
color: silver;
}
li.active:before{
content: url(statics/play.gif);
}
</style>
</head>
<body>
<ul id="wrapper">
</ul>
<audio src="" controls></audio>
<br>
<button id="play">播放</button>
<button id="pause">暂停</button>
<button id="previous">上一首</button>
<button id="next">下一首</button>
<br>
<input type="range" min="0" max="100" value="100">
<button class="play-mode" id="listRepeat">列表循环</button>
<button class="play-mode" id="singleRepeat">单曲循环</button>
<button class="play-mode" id="random">随机播放</button>
<script>
var oUl = document.querySelector(‘ul‘);
var oAudio = document.querySelector(‘audio‘);
var oRange = document.querySelector(‘input‘);
var oPlay = document.querySelector(‘#play‘);
var oPause = document.querySelector(‘#pause‘);
var oNext = document.querySelector(‘#next‘);
var oPrevious = document.querySelector(‘#previous‘);
var aPlayMode = document.querySelectorAll(‘.play-mode‘);
var currentIndex = 0;
var playMode = "listRepeat";
// 调整音量
oRange.oninput = function(){
oAudio.volume = oRange.value/100;
}
// 播放
oPlay.onclick = function(){
playSong();
}
// 暂停
oPause.onclick = function(){
oAudio.pause();
}
//歌曲列表
var songs = [
"花房姑娘",
"喜剧之王",
"counting-stars",
"greenslave",
"young-for-you"
]
//循环歌曲列表,创建div添加到页面上
songs.forEach(function(song){
var oLi = document.createElement(‘li‘);
oLi.innerHTML = song;
oUl.appendChild(oLi);
})
var aLi = document.querySelectorAll(‘li‘);
// 下一首
oNext.onclick = function(){
// 根据播放模式选取下一首歌
playNextSong();
}
oAudio.onended = function(){
// 根据播放模式选取下一首
playNextSong();
}
// 上一首
oPrevious.onclick = function(){
playPreviousSong()
}
// 点击播放
aLi.forEach(function(oLi,index){
oLi.onclick = function(){
currentIndex = index;
playSong();
}
})
// 播放模式更改
aPlayMode.forEach(function(oPlayMode){
oPlayMode.onclick = function(){
playMode = this.id;
console.log(playMode);
}
})
// 播放下一首歌的判断逻辑
function playNextSong(){
if( playMode == ‘listRepeat‘ ){
currentIndex++;
currentIndex = currentIndex%songs.length;
playSong();
} else if( playMode == ‘singleRepeat‘ ){
playSong();
} else if( playMode == ‘random‘ ){
currentIndex = rnd(0,songs.length,currentIndex);
playSong();
}
}
//上一首
function playPreviousSong(){
if( playMode == ‘listRepeat‘ ){
currentIndex -- ;
if( currentIndex < 0 ){
currentIndex = songs.length - 1
}
playSong();
} else if( playMode == ‘singleRepeat‘ ){
playSong();
} else if( playMode == ‘random‘ ){
currentIndex = rnd(0,songs.length,currentIndex);
playSong();
}
}
function playSong(){
oAudio.src = `statics/music/${songs[currentIndex]}.mp3`;
// 移除原activeDOM节点
var activeOne = document.querySelector(‘.active‘)
activeOne && activeOne.classList.remove(‘active‘);
aLi[currentIndex].classList.add(‘active‘);
oAudio.play();
}
function stopPlay(){
var oActive = document.querySelector(‘.active‘);
oActive && oActive.classList.remove(‘active‘);
// 停止播放
oAudio.currentTime = 0;
oAudio.pause();
}
//随机数,传入一个special的值,下面用于判断。如果这个值有了。就从新随机,没有的话就直接return
function rnd(n,m,special){
var result = parseInt(Math.random()*(m-n)+n);
return result == special ? rnd(n,m,special) :result
}
</script>
</body>
</html>
视频格式
mp4 √
avi rmvb flv mov mkv 3gp wmv
音频格式
mp3 √
wma ape m4a
<input>表单
type="emial" form内部有格式验证 靠不住
以下属性boolean对其无效
pattern="[A-Za-z]{3}"。用于输入框验证输入的类型 正则
<input type=‘text‘ readonly />readonly表示只读,不能更改;
disabled 阻止点击 禁用
placeholder占位符 输入框占位文字
<input type="text" required/> 必须输入内容才能提交;
autofocus 自动聚焦输入框
type="color" 颜色
type="time" 时间
type="date" 日期
type="week" 周末
type="search" 搜索 输入框有个清空按钮;
type="file" 文件
HTML5文件拖拽
ondragenter
拖拽文件进入
ondragleave
拖拽文件离开
ondragover
拖拽文件悬停(一直触发)
ondrop丢下文件
想要触发:
必须取消dragover的默认事件
ev -> ev.dataTransfer.files
ondragenter与ondragleave有问题,用setTimeout加上ondragover模拟;
FileReader
// 文件对象
var file = ev.dataTransfer.files[0];
var reader = new FileReader(); 文件读取对象
reader下面有两个事件
.readAsText只读文本(ev.srcElement.files[0])
.readAsDataURL图像、视频、音频(ev.srcElement.files[0])
reader
.onloadstart 文件加载开始
.onprogress 文件加载中{loaded total}可以得出进度条比例
.onload 可以拿到reader.reslut的数据
.onloadend 文件加载完成;
.error 文件加载失败
.abort 文件加载终止
.abort();文件加载终止
读取文件:
reader.result
文本文件:文本
多媒体文件:base64编码
input type="file"
ev -> srcElement -> files
原文:http://www.cnblogs.com/milx/p/6140691.html