JS_MediaPlayer类
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>MediaPlayer示例</title>
<style type="text/css">
body
{
font-size:12px;
font-family:宋体;
}
#divMpl
{
height: 137px;
width: 277px;
}
#divMsg
{
height: 155px;
overflow:auto;
width: 376px;
}
</style>
<script language="javascript" type="text/javascript">
/* MediaPlayer类定义 冰点原创 */
function MediaPlayer()
{
this.dom=null;
}
MediaPlayer.uiMode=
{
Full:"full",
Mini:"mini",
None:"none",
Invisible:"invisible"
}
MediaPlayer.prototype={
CreateAt:function(id) //在指定ID的标签中创建MediaPlayer控件,大小由该标签决定
{
this.dom=document.createElement("object");
this.dom.classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6";
this.dom.style.width="100%";
this.dom.style.height="100%";
var container=document.getElementById(id);
container.innerHTML="";
container.appendChild(this.dom);
this._Init();
},
BindID:function(id) //绑定一个已存在的Object标签,该标签应该为一个MediaPlayer控件
{
this.dom=document.getElementById(id);
this._Init();
},
_Init:function() //初始化,注册事件
{
var _this=this;
this.dom.attachEvent("PlayStateChange",
function(newState){_this.onPlayStateChange(newState)});
this.dom.attachEvent("Buffering",function(bStart){ _this.onBuffering(bStart) });
this.dom.attachEvent("Error",function(){ _this.onError(); });
this.dom.attachEvent("PositionChange",
function(oldPos,newPos){ _this.onPositionChange(oldPos,newPos); } );
this.dom.attachEvent("StatusChange",function(){ _this.onStatusChange(); })
},
onPlayStateChange:function(newState)
{
switch(newState)
{
case 1: //wmppsStopped
this.onStop();
break;
case 2: //wmppsPaused
this.onPaused();
break;
case 3: //wmppsPlaying
this.onPlay();
break;
case 4: //wmppsScanForward
break;
case 5: //wmppsScanReverse
break;
case 6: //wmppsBuffering
this.onBuffering_SC();
break;
case 7: //wmppsWaiting
break;
case 8: //wmppsMediaEnded
this.onMediaEnded();
break;
case 9: //wmppsTransitioning
this.onTransitioning();
break;
case 10: //wmppsReady
break;
case 11: //wmppsReconnecting
break;
case 12: //wmppsLast
break;
case 0: //wmppsUndefined
break;
default:
break;
}
},
// 事件列表
onStop:function(){},
onPaused:function(){},
onPlay:function(){},
onBuffering_SC:function(){},
onTransitioning:function(){},
onMediaEnded:function(){},
onError:function(){},
onPositionChange:function(oldPos,newPos){},
onStatusChange:function(){},
onBuffering:function(bStart){},
// 设置 暂时只做两个
setMode:function(mode){ this.dom.uiMode=mode; },
setValume:function(v){ this.dom.settings.volume=v; },
// 各种属性
getMediaName:function()
{
var media=this.dom.currentMedia;
if(media)
{
return media.name;
}
return "";
},
getMediaDuration:function()
{
var media=this.dom.currentMedia;
if(media)
{
return media.duration;
}
return "";
},
getMediaDurationString:function()
{
var media=this.dom.currentMedia;
if(media)
{
return media.durationString;
}
return "";
},
getStatus:function(){ return this.dom.status; },
getPosition:function(){ return this.dom.controls.currentPosition; },
getPositionString:function(){ return this.dom.controls.currentPositionString; },
getPlayState:function(){ return this.dom.playState; },
// 操作方法
OpenUrl:function(URL){ this.dom.URL=URL; },
Play:function(){ this.dom.controls.play(); },
Pause:function(){ this.dom.controls.pause();},
Stop:function(){ this.dom.controls.stop(); }
}
/* MediaPlayer类定义 冰点原创 */
var mpl=new MediaPlayer(); //创建一个MediaPlayer
window.onload=function()
{
mpl.CreateAt("divMpl");
mpl.setValume(100);
mpl.setMode(MediaPlayer.uiMode.Full);
mpl.onPlay=function(){ ShowMessage("正在播放["+this.getMediaName()+"]"); };
mpl.onPaused=function(){ ShowMessage("暂停"); };
mpl.onMediaEnded=function(){ ShowMessage("播放结束"); };
mpl.onStop=function(){ ShowMessage("停止"); };
mpl.onPositionChange=function(oldPos,newPos){
var pos1={
min:parseInt(oldPos/60),
sec:parseInt(oldPos%60)
}
var pos2={
min:parseInt(newPos/60),
sec:parseInt(newPos%60)
}
ShowMessage(pos1.min+":"+pos1.sec+ "->"+ pos2.min+":"+pos2.sec);
};
//mpl.onStatusChange=function(){ ShowMessage(this.getStatus()); };
mpl.OpenUrl("DuskToDawn.wma");
window.setInterval("ShowPlayTime()",1000);
}
function ShowPlayTime()
{
if(mpl.getPlayState()==3)
{
ShowStatus(mpl.getPositionString());
}
}
function ShowMessage(str)
{
var msg=document.getElementById("divMsg");
var tn=document.createTextNode(str);
msg.appendChild(tn);
msg.appendChild(document.createElement("br"));
}
function ShowStatus(str)
{
document.getElementById("divStatus").innerHTML=str;
}
</script>
</head>
<body>
<div id="divMpl"></div>
<div id="divStatus"> </div>
<input type="button" value="清空消息" onclick="document.getElementById('divMsg').innerHTML='';" />
<div id="divMsg"></div>
</body>
</html>
JS_MediaPlayer类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
随机推荐
- python 2.43 升级到2.7
[root@GW1 bin]# lsb_release -aLSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3. ...
- vmstat和iostat
一.vmstat1.命令示例#vmstat 5每5秒输出一次 2.输出详解procs -----------memory---------- ---swap-- -----io---- --syste ...
- sublime通用快捷键 汉化 安装 插件
Ctrl+Alt+P 切换项目 1.Ctrl+Shift+P 打开Package Control Ctrl + Shift + P ,输入View, 选择Toogle Tabs ...
- hive --service metastore 出现的问题
Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083 执行命令jps root@hadoopm:/usr# jps1763 Res ...
- IIC总线
一. 概述 1. IIC总线是PHILIPS公司推出的一种串口总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串口总线. 2. IIC总线只有两根双向信号线.一根是数据线SDA,一 ...
- (转载)Spring的refresh()方法相关异常
如果是经常使用Spring,特别有自己新建ApplicationContext对象的经历的人,肯定见过这么几条异常消息:1.LifecycleProcessor not initialized - c ...
- GPS部标平台的架构设计(六)-Android手机客户端和手机查车设计
对于GPS软件平台,虽然有功能非常丰富的PC端或BS客户端,但是客户也是需要移动客户端来作为自己的辅助工具,也是需要的.做为GPS平台的设计者和开发者,在开发移动客户端的时候,也需要从常规的服务器开发 ...
- Unity5 项目设置 .gitignore 解决 Missing Prefab 问题
同步Unity工程时候,两边总是出现Missing Prefab问题. 按照网上的教程设置是无效的. 后来Google了一下 才发现 新版Unity和旧版的设置方式是不同的. 1.在 Edit-&g ...
- 【js跨域】js实现跨域访问的几种方式
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- Android Fragment应用实战
现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...