mcwind's blog

游戏开发 Unity3d catia二次开发,协同设计流程,多学科设计仿真
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用javascrip设置silverlight mediaelement的播放时刻

Posted on 2007-10-06 14:48  mcwind  阅读(460)  评论(0编辑  收藏  举报

这两天在用silverlight做一个媒体播放器,有两项基本功能要实现,即

1 显示当前播放时间

2 跳转到特定时间开始播放

经过查阅资料,实现上述功能可以用MediaElement的Position属性来实现。例如,用javascript获取当前播放时间可以写成这样

fuction GetTime(sender,arg)
{   
    var host = sender.getHost();
    var mediaPlayer = Convert.ToMediaElement(host.content.findName('player));
    var curPos = mediaPlayer .get_position();

    var array = curPos.Seconds.toString().split('.',2);
    var hour = parseInt(array[0]/ 3600);
    var minutes = parseInt((array[0]% 3600) / 60);
    var seconds = parseInt(array[0]% 60);
    var milliseconds = array[1].substring(0,3);

    //show time here....

}

上面代码中的Convert.ToMediaElement()方法是由Justin-Josef Angel 提供的intellisense,此处不多介绍。需要注意的是这一句:

curPos.Seconds.toString()

因为position返回的是timespan对象,并且只提供了一个Secondes属性,表示将整个时间换算成秒以后的值,因此只能通过该属性来计算其他时、分、毫秒。

同样,我们可以通过position来定位播放的新时刻:

fuction SetTime(sender,arg)
{   
    var host = sender.getHost();
    var mediaPlayer = Convert.ToMediaElement(host.content.findName('player));

    var newPos =  "0.10:23:45.345";

    mediaPlayer.set_position(newPos);

}

设置position时,并不能直接将一个timespan对象作为参数,例如

var pos = mediaPlayer.get_position();

mediaPlayer.set_position(pos);

执行时就会报错,原因是set_position只接受格式为 天.时:分:秒.毫秒 的字符串。