<!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">&nbsp;</div>
    <input type="button" value="清空消息" onclick="document.getElementById('divMsg').innerHTML='';" />
<div id="divMsg"></div>
</body>
</html>

JS_MediaPlayer类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. 轻量级队列beanstalkd

    一.基本Beanstalkd,一个高性能.轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Face ...

  2. /proc/sys/vm/参数

    1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作.缺省设置:0,禁用Block Debug模式2) ...

  3. Thinking in Java——笔记(16)

    Arrays Why arrays are special There are three issues that distinguish arrays from other types of con ...

  4. IE 6 ~ 9 CSS Hack 写法总结

    IE 6 ~ 9 CSS Hack 写法总结 24th 四, 14 lip2up [code lang="css"]_color: red;    /* ie6 */*color: ...

  5. JAVA基础篇NO2--Java中的基本命名规则及数据类型

    1.Java中的常量及进制 1.常量: 在程序运行的过程中,不可以改变的量,就是常量 boolean类型的值只能是true或者false null: 空常量, 代表不存在! ------------- ...

  6. vs2010 2013 2015+ 必备插件精选(15个)

    转 http://www.spersky.com/post/vsPlugins.html 我目前主要用的是Hide Main Page——公司配给的电脑屏幕分辨率好小,还是1366*768的,去掉头可 ...

  7. grafana + influxdb + telegraf , 构建性能监控平台

    1.安装平台 1).grafana , 访问各类数据源 , 自定义报表.显示图表等等 , 用于提供界面监控 , 默认端口为3000 , 默认登陆信息admin wget https://grafana ...

  8. 项目在vs中打开后识别不出来ashx页面的解决方法

    在web.config配置文件中指定页面版本 <add key="webPages:Version" value="2.0"/> <?xml ...

  9. deepin linux 安装 mysql

    一:安装mysql 打开deepin terminal: 在此过程中会提示输入两次密码,就是输入 root 账号密码,两次输入密码一样就可以了.然后一路Y安装成功. 一旦安装成功,MySql服务器会自 ...

  10. Android Studio 使用Lambda

    1,昨天在使用RxJava的时候,调用map.filter之类的方法要创建挺多的匿名内部类,所以我们打算试用一下Lambda让我们的代码更有阅读新性,下看一下我们的对比 在使用之前我们代码是这样的 O ...