在考试系统中,我们有一个需求是在页面中做一个隐藏的音乐空间,并且实现后台顺序可控!经过反复研究和测试,最终用一个简单的方式实现了这个需求,现在拿出来和大家共享,共同交流和研究!

第一步:在后台添加公共变量


public string[] lat = null;//存放文件播放地址lat
        public string[] lng = null;//存放文件时间长度(包括空白时间)值lng
        public int lng_len = 0;//用于获得数组长度
        public int k = 0;//用于赋值循环


第二步:在前台获取,并传给js文件


<script type="text/javascript">

        var jingdu = new Array();
        var weidu = new Array();
        <%
        for(int k=0;k<lng_len;k++){
         %>
        jingdu.push("<%=lng[k]%>");
        weidu.push("<%=lat[k]%>");
        <%
        }
         %>


        getData(jingdu, weidu)

</script>


第三步:添加前台音乐播放控件


<div id="OBJplayerDiv"><embed id="OBJplayer" style=" FILTER: invert(); WIDTH: 0px; HEIGHT: 0px" src="" type="audio/mpeg" autostart="true"  /></div>


第四步:编辑js文件和控件交互


//经度数组表示听力材料播放的地址
var jingdu = new Array();

//纬度数组表示听力材料进行的时间,时间为总时间(包含空白时间)
var weidu = new Array();

//时间标志为第一秒
var timeRmark = 1;

//听力材料标志位,初始值为0
var i;

//听力材料共进行多少个
var j = 0;

//获取数据,实际是给听力用到的数组赋值,界面端调用
function getData(cjingdu, cweidu) {

    //时间标志为第一秒
    timeRmark = 1;

    //听力材料标志位,初始值为0
    i = 0;

    //经度表示听力材料播放的地址
    jingdu = cjingdu;

    //纬度表示听力材料进行的时间,时间为总时间(包含空白时间)
    weidu = cweidu;
    
    //听力材料共进行多少个
    j = weidu.length;

 }


//每一秒钟就改变一次在界面上显示的时间
var timer2 = window.setInterval("AlterPresentationForMusic()", 1000);
//向前走的时间值
var TheTime = 0;
var theMusicMark = 0;
function AlterPresentationForMusic() {

/*****************************************************************************************
------------------------------------------------------------------------------------------
----------------------------以下js代码是播放听力----------------------------------
------------------------------------------------------------------------------------------
*****************************************************************************************/

    //判断是否有听力材料
    if (j > 0)
    { 
        //每个一秒时间值加1
        TheTime = TheTime + 1;

        //如果时间少于六十秒钟,就跳转到登录页面
        if (TheTime == '5') {
            alert("now is 05!");
        }

        //判断是否进行完听力
        if (i <= j) {

            //如果听力已经进行完最后一题
            
            
                //如果听力执行到下一个开始的时间s
                if (TheTime == timeRmark) {
                    //document.getElementById("OBJplayer").stop();
                    //alert("now is 01!");

                    if (i == j) {
                        //结束听力考试
                        $("#OBJplayerDiv").innerHTML = '';
                        document.getElementById('OBJplayerDiv').innerHTML = '<embed id="OBJplayer" style="FILTER: invert(); WIDTH: 0px; HEIGHT: 0px" src="" type="audio/mpeg" autostart="true"  />'
                    }
                    else {

                        //开始下一段听力
                        $("#OBJplayerDiv").innerHTML = '';
                        document.getElementById('OBJplayerDiv').innerHTML = '<embed id="OBJplayer" style="FILTER: invert(); WIDTH: 0px; HEIGHT: 0px" src="' + jingdu[i] + '" type="audio/mpeg" autostart="true"  />'
                        //document.getElementById("OBJplayer").play();

                        //更新时间标志为下一个听力材料转换时间
                        timeRmark = parseInt(timeRmark) + parseInt(weidu[i]);

                        //i值标志位加1
                        i++;
                    }
                }
            

        
        }
    }
 
}




第五步:后台加载获取播放地址



//存放文件播放地址list——lat
                ArrayList lng_list = new ArrayList();
                //存放文件时间长度(包括空白时间)值lng
                ArrayList lat_list = new ArrayList();


                foreach (DataRow DR in dtDisTableChild.Rows)
                {
                    lng_list.Add(DR["QuestionContent"].ToString());
                    lat_list.Add(DR["TimeLength"].ToString());
                }

                lng = (string[])lng_list.ToArray(typeof(string));
                lat = (string[])lat_list.ToArray(typeof(string));
                lng_len = lng_list.Count;



        最后简单实现了音乐播放的功能,最后发现最简单的方法组合往往就能实现较为复杂的功能!考试系统的系列博客会持续更新,和大家分享在考试系统中遇到的问题和收获,希望和大家分享所学所得!