html js 定制进度条 (二)

来源:互联网 发布:考试宝典怎么样知乎 编辑:程序博客网 时间:2024/06/09 15:48

   版本一遗留的问题:

1 鼠标消息捕获问题(图层覆盖),解决方法设置图层,图像层置于底层,鼠标消息层置于上层且设置为透明,完美解决。

    function createMouseEventDiv() {do{var parentCanvas = document.getElementById(parentCanvasId);if(parentCanvas==null || parentCanvas==undefined){alert("getElementById " + parentCanvasId + "错误!" );ini_step++;break;}var parentWidth = parentCanvas.offsetWidth;if(parentWidth==null || parentWidth==undefined){alert("获取画布宽失败");ini_step++;break;}var parentHeight = parentCanvas.offsetHeight;if(parentHeight==null || parentHeight==undefined){alert("获取画布高失败");ini_step++;break;}var filterStr ='';if(browserMatch.browser=='IE' && browserMatch.version <=9.0){filterStr = 'filter:alpha(opacity=0);';            //IE9.0以下 版本的区别  支持滤镜}else{filterStr = 'opacity: 0;';                          //IE10.0以上 版本的区别}var htm = '<div id="' + mouseCanvasId + '" style="position:absolute;' +'width:' + parentWidth + 'px;' +'height:' + parentHeight + 'px;' +'background-color:#363636;' +filterStr +'"><\/div>';//alert(htm);parentCanvas.insertAdjacentHTML("beforeEnd", htm);}while(0);    }    function createCanvasDiv () {do{var parentCanvas = document.getElementById(parentCanvasId);if(parentCanvas==null || parentCanvas==undefined){alert("getElementById " + parentCanvasId + "错误!" );ini_step++;break;}var parentWidth = parentCanvas.offsetWidth;if(parentWidth==null || parentWidth==undefined){alert("获取画布宽失败");ini_step++;break;}var parentHeight = parentCanvas.offsetHeight;if(parentHeight==null || parentHeight==undefined){alert("获取画布高失败");ini_step++;break;}var htm = '<div id="' + pCanvasId + '" style="position:absolute;' +'width:' + parentWidth + 'px;' +'height:' + parentHeight + 'px;' +'background-color:#363636;"' +'><\/div>';//alert(htm);parentCanvas.insertAdjacentHTML("beforeEnd", htm);}while(0);    }


2 IE 兼容问题,新版本支持IE7.0~IE11.0

涉及 问题1:浏览器版本的获取

function getBrowserInfo(){var ua = navigator.userAgent.toLowerCase() ;rMsie = /(msie\s|trident.*rv:)([\w.]+)/,     rFirefox = /(firefox)\/([\w.]+)/,     rOpera = /(opera).+version\/([\w.]+)/,     rChrome = /(chrome)\/([\w.]+)/,     rSafari = /version\/([\w.]+).*(safari)/;    var browser;    var version;  var match = rMsie.exec(ua);      if(match != null){   browser = "IE";  version = match[2] || "0";return { browser : "IE", version : match[2] || "0" };      }      var match = rFirefox.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rOpera.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rChrome.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rSafari.exec(ua);      if (match != null) {    return { browser : match[2] || "", version : match[1] || "0" };      }      if (match != null) {    return { browser : "", version : "0" };      }    }
 问题2:wz_jsgraphics 对IE9.0以上的支持,修改代码
<span style="white-space:pre"></span><pre name="code" class="javascript"><span style="white-space:pre"></span>function chkDHTM(x, i)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>x = document.body || null;<span style="white-space:pre"></span>jg_ie = x && typeof x.insertAdjacentHTML != "undefined";<span style="white-space:pre"></span>jg_dom = (x && !jg_ie &&<span style="white-space:pre"></span>typeof x.appendChild != "undefined" &&<span style="white-space:pre"></span>typeof document.createRange != "undefined" &&<span style="white-space:pre"></span>typeof (i = document.createRange()).setStartBefore != "undefined" &&<span style="white-space:pre"></span>typeof i.createContextualFragment != "undefined");<span style="white-space:pre"></span>jg_ihtm = !jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined";<span style="white-space:pre"></span>//jg_fast = jg_ie && document.all && !window.opera;   //注释 使其支持IE9.0 及以上<span style="white-space:pre"></span>jg_fast = false;     //新加<span style="white-space:pre"></span>jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined";<span style="white-space:pre"></span>}

问题3:IE10.0 以上滤镜的属性表示不同

<span style="white-space:pre"></span>if(browserMatch.browser=='IE' && browserMatch.version <=9.0){filterStr = 'filter:alpha(opacity=0);';            //IE9.0以下 版本的区别  支持滤镜}else{filterStr = 'opacity: 0;';                          //IE10.0以上 版本的区别}

完整的代码:

/*author: zjjtime : 201609013 回放状态时间刻度处理类*///定义回掉函数命令码if (typeof hwxPBSTimerCbCmd == "undefined") {    var hwxPBSTimerCbCmd = {};    hwxPBSTimerCbCmd.ReqPlayTime = 0;   //重新定位播放起始位置    hwxPBSTimerCbCmd.ReqStatusTbls = 1; //重新请求录像状态表}/*录像状态类timePeriods: 录像查询区间recordedTimeTbls: 录像的时间表*/function hwxRecordStatus(timePeriodsArr, recordedTimeTbls) {    this.ptimePeriodsArr = new Array();    if (timePeriodsArr != undefined) {        for (var i = 0; i < timePeriodsArr.length; i++) {            this.ptimePeriodsArr.push(timePeriodsArr[i]);        }    }    this.precordedTimeTbls = new Array();    if (recordedTimeTbls != undefined) {        for (var i = 0; i < recordedTimeTbls.length; i++) {            this.precordedTimeTbls.push(recordedTimeTbls[i]);        }    }}function hwxPBSTimer(canvasId, playTime, hwxPBSTimerCallback) {var parentCanvasId = canvasId;    var pCanvasId = parentCanvasId+"_1";var mouseCanvasId = parentCanvasId+"_2";    var curPlayTime = playTime;    var pHwxPBSTimerCallback = hwxPBSTimerCallback;    //回掉参数数组    var callbackArgsArr = new Array();    //录像状态数组    var recordedStatusArr = new Array();    //鼠标左键按下标志    var mouseDownFlag = 0;    //鼠标移动标志    var mouseDownMoveStep = 0;    //鼠标当前位置    var mousePosX = 0;    var mousePosY = 0;    //鼠标经过标志    var mouseOverFlag = 0;    //鼠标单击事件    var mouseclickFlag = 0;    var mouseZoomDownFlag = 0;    //鼠标双击事件标志    var mousedblclickFlag = 0;    //鼠标移动方向1 向右 减; 0 向左 加    var mouseMoveDir = 0;    //时间字符长占用的像素(经验值)    var timeStrPixLen = 85;    //鼠标左键按下时播放时间    var mouseDownPlayTime = 0;    var mouseUpPlayTime = 0;    /*    60               5 秒钟一个刻度值 (12个)    1800  30分钟     5 分钟一个刻度值  (6个)    3600  1小时      10 分钟一个刻度值  (6个)    86400 24小时     2 小时一个刻度值  (12个)    */    //时间宽度表单位是秒    var timeWidthTbls = new Array(60, 1800, 3600, 86400);    //时间宽度说明表    var timeWidthTextTbls = new Array("范围: 1分钟; 单位: 秒", "范围: 30分钟; 单位: 分钟", "范围: 1小时; 单位: 分钟", "范围: 1天; 单位: 小时");    //拖拽移动步长单位是秒    var timeWidthStepTbls = new Array(1, 15, 60, 1800);    var timeWidthMarkTbls = new Array(10, 60, 900, 10800);    //当前使用的时间宽度索引    var timeWidthTblIndex = 3;    var timeWidthTblNum = timeWidthTbls.length;    //    //主定时器    var mainTimer = null;var ini_step = 0;do{//获取浏览器信息var browserMatch = getBrowserInfo();//IE 11.0  8.0//调试信息var dbgStr = browserMatch.browser+browserMatch.version;createCanvasDiv();createMouseEventDiv();  //获取画布var myCanvas = document.getElementById(pCanvasId);if(myCanvas==null || myCanvas==undefined){alert("获取画布" + pCanvasId + "失败!!");ini_step++;break;}var myMouseCanvas = document.getElementById(mouseCanvasId);if(myMouseCanvas==null || myMouseCanvas==undefined){alert("获取鼠标DIV" + mouseCanvasId + "失败!!");ini_step++;break;}var myPen = new jsGraphics(pCanvasId);if(myPen==null || myPen==undefined){alert("创建DIV 画笔失败!!");ini_step++;break;}//获取div 宽高//var canvasWidth = myCanvas.offsetWidth;/*说明 offsetWidth 存在为0 的情况,但调试模式下不存原因尚不清楚*/var canvasWidth = myCanvas.clientWidth;if( canvasWidth==undefined || canvasWidth==null || canvasWidth==0){alert("获取画布宽失败"+canvasWidth);ini_step++;break;}//var canvasHeight = myCanvas.offsetHeight;var canvasHeight = myCanvas.clientHeight;if(canvasHeight==undefined || canvasHeight==null || canvasHeight==0){alert("获取画布高失败");ini_step++;break;}//录像状态条信息var vStatusX = 0;var vStatusY = parseInt(canvasHeight / 5) * 4;var vStatusWidth = canvasWidth;var vStatusHeight = parseInt(canvasHeight / 5) * 1;}while(0);    function createMouseEventDiv() {do{var parentCanvas = document.getElementById(parentCanvasId);if(parentCanvas==null || parentCanvas==undefined){alert("getElementById " + parentCanvasId + "错误!" );ini_step++;break;}var parentWidth = parentCanvas.offsetWidth;if(parentWidth==null || parentWidth==undefined){alert("获取画布宽失败");ini_step++;break;}var parentHeight = parentCanvas.offsetHeight;if(parentHeight==null || parentHeight==undefined){alert("获取画布高失败");ini_step++;break;}var filterStr ='';if(browserMatch.browser=='IE' && browserMatch.version <=9.0){filterStr = 'filter:alpha(opacity=0);';            //IE9.0以下 版本的区别  支持滤镜}else{filterStr = 'opacity: 0;';                          //IE10.0以上 版本的区别}var htm = '<div id="' + mouseCanvasId + '" style="position:absolute;' +'width:' + parentWidth + 'px;' +'height:' + parentHeight + 'px;' +'background-color:#363636;' +filterStr +'"><\/div>';//alert(htm);parentCanvas.insertAdjacentHTML("beforeEnd", htm);}while(0);    }    function createCanvasDiv () {do{var parentCanvas = document.getElementById(parentCanvasId);if(parentCanvas==null || parentCanvas==undefined){alert("getElementById " + parentCanvasId + "错误!" );ini_step++;break;}var parentWidth = parentCanvas.offsetWidth;if(parentWidth==null || parentWidth==undefined){alert("获取画布宽失败");ini_step++;break;}var parentHeight = parentCanvas.offsetHeight;if(parentHeight==null || parentHeight==undefined){alert("获取画布高失败");ini_step++;break;}var htm = '<div id="' + pCanvasId + '" style="position:absolute;' +'width:' + parentWidth + 'px;' +'height:' + parentHeight + 'px;' +'background-color:#363636;"' +'><\/div>';//alert(htm);parentCanvas.insertAdjacentHTML("beforeEnd", htm);}while(0);    }    //添加录像状态    this.addRecordStatus = function (status) {        if (status == undefined)            return;        recordedStatusArr.push(status);    }    //清空录像状态    this.cleanRecordStatus = function () {        recordedStatusArr.length = 0;    }    //更新当前播放时间    this.updatePlayTimeFunc = function (playTime) {        if (playTime == undefined)            return;        if (mouseDownFlag)            return;        curPlayTime = playTime;    };    this.cleanPSBTimerFunc = function () {        clearInterval(this.updatePBSTimerId);    };    //设置新的起始时间播放    function setNewPlayStartTimeCallback() {        callbackArgsArr.length = 0;        callbackArgsArr.push(curPlayTime);        pHwxPBSTimerCallback(hwxPBSTimerCbCmd.ReqPlayTime, callbackArgsArr);    }    function isInTimePeriods(time) {        if (time == undefined)            return;        var pNum = 0;        for (var j = 0; j < recordedStatusArr.length; j++) {            //大区间            var recStatus = recordedStatusArr[j];            //            if (time >= recStatus.ptimePeriodsArr[0] && time <= recStatus.ptimePeriodsArr[1]) {                pNum++;            }        }        if (pNum != 0)            return true;        else            return false    }    //检查是否超出当前已有的时间区域    function checkTimePeriods() {        //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        var arrSize = recordedStatusArr.length;        var sNum = 0;        var eNum = 0;        var sTime = 0;        var eTime = 0;        if (isInTimePeriods(startTime) == false) {            var date = new Date(startTime * 1000);            date.setHours(0);            date.setMinutes(0);            date.setSeconds(0);            sTime = parseInt(Date.parse(date) / 1000);        }        if (isInTimePeriods(endTime) == false) {            var date = new Date(endTime * 1000);            date.setHours(0);            date.setMinutes(0);            date.setSeconds(0);            eTime = parseInt(Date.parse(date) / 1000);        }        if (sTime != 0)            requestNewTimeSpaceStatus(sTime, sTime + 84600)        if (sTime != eTime) {            if (eTime != 0)                requestNewTimeSpaceStatus(eTime, eTime + 84600)        }        return;    }    function requestNewTimeSpaceStatus(startTime, endTime) {        if (startTime == undefined || endTime == undefined)            return;        callbackArgsArr.length = 0;        callbackArgsArr.push(startTime);        callbackArgsArr.push(endTime);        pHwxPBSTimerCallback(hwxPBSTimerCbCmd.ReqStatusTbls, callbackArgsArr);    }function getBrowserInfo(){var ua = navigator.userAgent.toLowerCase() ;rMsie = /(msie\s|trident.*rv:)([\w.]+)/,     rFirefox = /(firefox)\/([\w.]+)/,     rOpera = /(opera).+version\/([\w.]+)/,     rChrome = /(chrome)\/([\w.]+)/,     rSafari = /version\/([\w.]+).*(safari)/;    var browser;    var version;  var match = rMsie.exec(ua);      if(match != null){   browser = "IE";  version = match[2] || "0";return { browser : "IE", version : match[2] || "0" };      }      var match = rFirefox.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rOpera.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rChrome.exec(ua);      if (match != null) {    return { browser : match[1] || "", version : match[2] || "0" };      }      var match = rSafari.exec(ua);      if (match != null) {    return { browser : match[2] || "", version : match[1] || "0" };      }      if (match != null) {    return { browser : "", version : "0" };      }    }    /*        刷新画布    */    function CanvasUpdate () {        /*        if (mouseDownFlag)            pause(1000);*/        myPen.clear();        drawTimeStrText();        drawScaleValue();        drawRecordedStatus();drawZoomInBtn();drawZoomOutBtn();    }    //启动定时器    this.run = function () {        if (mainTimer == undefined || mainTimer==null)            mainTimer = setInterval(CanvasUpdate, 100);    }    function prun () {        if (mainTimer == undefined || mainTimer == null)            mainTimer = setInterval(CanvasUpdate, 100);    }    function stop() {        if (mainTimer != undefined && mainTimer != null) {            clearInterval(mainTimer);            mainTimer = null;        }    }    function pause(ms) {        if (ms == undefined)            ms = 1000;        stop();        setTimeout(prun, ms);    }     //文本信息    function drawTimeStrText() {        var maxHeight = canvasHeight;         var maxWidth = canvasWidth;        //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        //鼠标双击事件        if (mousedblclickFlag) {            mousedblclickFlag = 0;            if (mousePosY >= maxHeight / 2) {                curPlayTime = startTime + parseInt(timeWidth * mousePosX / maxWidth);                startTime = curPlayTime - parseInt(timeWidth / 2);                endTime = curPlayTime + parseInt(timeWidth / 2);                setNewPlayStartTimeCallback();            }        }             //文字示例        //播放时间        var midTimestrPixLen = 196;        var date = new Date(curPlayTime * 1000);        Y = date.getFullYear() + '-';        M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';        D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';        h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';        m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';        s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());        var timeStr = Y + M + D + h + m + s;        myPen.setColor("#FFF68F");        myPen.setFont('verdana,geneva,helvetica,sans-serif',16, Font.PLAIN);        myPen.drawString(timeStr, maxWidth / 2 - midTimestrPixLen / 2, 0);        myPen.paint();        //画中间播放的刻度线        myPen.setFont('verdana,geneva,helvetica,sans-serif', 32, Font.PLAIN);myPen.setStroke(2);        myPen.setColor("#FCFCFC");        myPen.drawLine(maxWidth / 2, maxHeight / 5, maxWidth / 2, maxHeight);        myPen.paint();myPen.setStroke(1);        myPen.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN);        //当前的时间范围        myPen.setColor("#FCFCFC");        myPen.drawString(timeWidthTextTbls[timeWidthTblIndex], maxWidth / 5 * 3, 20);        //叠加调试信息        if(dbgStr != undefined && dbgStr.length >0)        {            myPen.setColor("#FCFCFC");            myPen.drawString(dbgStr, 0, 20);        }        /*        var timeStr = timeWidthTextTbls[timeWidthTblIndex];        context.strokeStyle = "#FCFCFC";        context.lineWidth = 1.4;        context.font = "smaller sans-serif";        context.strokeText(timeStr, maxWidth / 5 * 3, 20);        */        timeStrPixLen = 150;        //当前鼠标位置,对应的时间刻度        if (mouseOverFlag == 1 && mousePosY >= maxHeight /2) {                       var date = new Date((startTime + parseInt(timeWidth * mousePosX / maxWidth)) * 1000);            Y = date.getFullYear() + '-';            M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';            D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';            h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';            m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';            s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());            var timeStr = Y + M + D + h + m + s;            var x = mousePosX;            if (mousePosX + timeStrPixLen > maxWidth)                x = maxWidth - timeStrPixLen;            myPen.setColor("#FCFCFC");            myPen.drawString(timeStr, x, maxHeight/2);        }    }    //画 录像状态条    function drawRecordedStatus() {        var rectX = 0;        var rectW = 0;        //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        var maxHeight = canvasHeight;        var maxWidth = canvasWidth;        //当前显示区间内录像时间表        var curSenceTbls = new Array();        var tblsNum = 0;        //计算录像区域        var arrSize = recordedStatusArr.length;        for (var j = 0; j < arrSize; j++) {            //大区间            var recStatus = recordedStatusArr[j];            if ((startTime >= recStatus.ptimePeriodsArr[0] && startTime <= recStatus.ptimePeriodsArr[1]) || (endTime >= recStatus.ptimePeriodsArr[0] && endTime <= recStatus.ptimePeriodsArr[1])) {                var recordedTimeTbls = recStatus.precordedTimeTbls;                for (var i = 0; i < recordedTimeTbls.length; i++) {                    if (recordedTimeTbls[i][0] < startTime) {                        if (recordedTimeTbls[i][1] > startTime) {                            if (recordedTimeTbls[i][1] <= endTime) {                                curSenceTbls[tblsNum] = new Array(startTime, recordedTimeTbls[i][1]);                                tblsNum++;                            }                            else {                                curSenceTbls[tblsNum] = new Array(startTime, endTime);                                tblsNum++;                            }                        }                    }                    else if (recordedTimeTbls[i][0] >= startTime && recordedTimeTbls[i][0] < endTime) {                        if (recordedTimeTbls[i][1] <= endTime) {                            curSenceTbls[tblsNum] = new Array(recordedTimeTbls[i][0], recordedTimeTbls[i][1]);                            //alert(recordStatusTbls[i][0]+"--"+startTime);                            tblsNum++;                        }                        else {                            curSenceTbls[tblsNum] = new Array(recordedTimeTbls[i][0], endTime);                            //alert(recordStatusTbls[i][0]+"--"+recordStatusTbls[i][1]);                            tblsNum++;                        }                    }                    else {                    }                }            }        }        //没有录像        if (tblsNum <= 0) {            myPen.setColor("#00EC00");            myPen.drawString("没有录像", maxWidth / 2, maxHeight / 2);            myPen.paint();        }        for (var i = 0; i < tblsNum; i++) {            vStatusX = (curSenceTbls[i][0] - startTime) / timeWidth * maxWidth;            vStatusWidth = (curSenceTbls[i][1] - curSenceTbls[i][0]) / timeWidth * maxWidth;            myPen.setColor("#00EC00");                        /*            myPen.drawLine(vStatusX, vStatusY, vStatusX + vStatusWidth, vStatusY);            myPen.drawLine(vStatusX, vStatusY+1, vStatusX + vStatusWidth, vStatusY+1);            myPen.drawLine(vStatusX, vStatusY+2, vStatusX + vStatusWidth, vStatusY+2);            myPen.drawLine(vStatusX, vStatusY+3, vStatusX + vStatusWidth, vStatusY+3);            myPen.drawLine(vStatusX, vStatusY + 4, vStatusX + vStatusWidth, vStatusY + 4);            */            myPen.fillRect(vStatusX, vStatusY, vStatusWidth, vStatusHeight-1);            myPen.paint();        }    }    //画刻度    function drawScaleValue() {        //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        var maxHeight = canvasHeight;        var maxWidth = canvasWidth;        //var timeWidthTbls = new Array(60,1800,3600,86400);        /*60               5 秒钟一个刻度值 (12个)    1800  30分钟     5 分钟一个刻度值  (6个)3600  1小时      10 分钟一个刻度值  (6个)86400 24小时     2 小时一个刻度值  (12个)*/        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var curScale = 0;        var scaleStrPixlen = 18; //经验值var lx,ly;        switch (timeWidth) {            case 60:                var date = new Date(startTime * 1000);                var startSecond = date.getSeconds();                for (var i = 0; i < 60; i++) {                    curScale = startSecond + i;                    if (curScale >= 60)                        curScale = curScale - 60;                    if (curScale % 5 == 0) {                        //画 刻度值                        myPen.setColor("#ADADAD");if((i * maxWidth / 60 - scaleStrPixlen / 2) >0)                        myPen.drawString(curScale, i * maxWidth / 60 - scaleStrPixlen / 2, maxHeight /5* 3);                        myPen.paint();                        //画 刻度线                        myPen.setColor("#ADADAD");                        myPen.drawLine(i * maxWidth / 60, maxHeight / 5 * 4 - 3, i * maxWidth / 60, maxHeight);                        myPen.paint();                    }                }                break;            case 1800:                var date = new Date(startTime * 1000);                var startHour = date.getHours();                var startMin = date.getMinutes();                var startSec = date.getSeconds();                var curSecOffset = startSec;  //重点                for (var i = 0; i < 30; i++) {                    curScale = startMin + i;                    if (curScale >= 60)                        curScale = curScale - 60;                    if (curScale % 5 == 0) {lx=(i * 60 - curSecOffset) * maxWidth / 1800;                        //画 刻度值                        myPen.setColor("#ADADAD");if(lx>=0)                        myPen.drawString(curScale, lx - scaleStrPixlen / 2, maxHeight /5* 3);                        myPen.paint();                        //画 刻度线                        myPen.setColor("#ADADAD");if(lx>=0)                        myPen.drawLine(lx, maxHeight / 5 * 4 - 3, lx, maxHeight);                        myPen.paint();                    }                }                break;            case 3600:                var date = new Date(startTime * 1000);                var startHour = date.getHours();                var startMin = date.getMinutes();                var startSec = date.getSeconds();                var curSecOffset = startSec;                //var curSecOffset = 60- startSec;                //if(curSecOffset==60)                //curSecOffset = 0;                for (var i = 0; i < 60; i++) {                    curScale = startMin + i;                    if (curScale >= 60)                        curScale = curScale - 60;                    if (curScale % 10 == 0) {lx = (i * 60 - curSecOffset) * maxWidth / 3600;                        //画 刻度值                        myPen.setColor("#ADADAD");if(lx>=0)                        myPen.drawString(curScale, lx - scaleStrPixlen / 2, maxHeight / 5 *3);                        myPen.paint();                        //画 刻度线                        myPen.setColor("#ADADAD");if(lx>=0)                        myPen.drawLine(lx, maxHeight / 5 * 4 - 3, lx, maxHeight);                        myPen.paint();                    }                }                break;            case 86400:                var date = new Date(startTime * 1000);                var startHour = date.getHours();                var startMin = date.getMinutes();                var startSec = date.getSeconds();                //var curSecOffset = 3600 - startMin*60- startSec;                var curSecOffset = startMin * 60 + startSec;                //if(curSecOffset==3600)                //curSecOffset = 0;                for (var i = 0; i < 24; i++) {                    curScale = startHour + i;                    if (curScale >= 24)                        curScale = curScale - 24;                    if (curScale % 2 == 0) {                        lx = (i * 3600 - curSecOffset) * maxWidth / 86400;//画 刻度值                        myPen.setColor("#ADADAD");if(lx>=0)myPen.drawString(curScale, lx - scaleStrPixlen / 2, maxHeight / 5 * 3);                        myPen.paint();                        //画 刻度线                        myPen.setColor("#ADADAD");if(lx>=0)myPen.drawLine(lx, maxHeight / 5 * 4 - 3, lx, maxHeight);                        myPen.paint();                    }                }                break;        }    }//画缩放按钮+function drawZoomInBtn(){ //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        var maxHeight = canvasHeight;        var maxWidth = canvasWidth;//按钮中心坐标var BtnCx = maxWidth/10*9;var BtnCy = maxHeight/5;var BtnWidth = 20;var BtnHeight = 20;var BtnX = BtnCx - BtnWidth/2 ;var BtnY = BtnCy - BtnHeight/2 ;//画外圈myPen.setColor("#4F4F4F");myPen.fillRect(BtnX, BtnY, BtnWidth, BtnHeight);myPen.paint();var BtnWidth2 = 14;var BtnHeight2 = 14;var lineLen = 12;//动画效果if(mouseDownFlag==1){if(mousePosX>=BtnX && mousePosX <= BtnX+BtnWidth && mousePosY >=BtnY && mousePosY <= BtnY +BtnHeight){BtnWidth2 = 20;BtnHeight2 = 20;lineLen = 14;if (timeWidthTblIndex <= 0) {timeWidthTblIndex = 0;}else {timeWidthTblIndex--;}//mouseclickFlag = 0;}}var BtnX2 = BtnCx - BtnWidth2/2 ;var BtnY2 = BtnCy - BtnHeight2/2 ;//画内圈myPen.setColor("#6C6C6C");myPen.fillRect(BtnX2, BtnY2, BtnWidth2, BtnHeight2);myPen.paint();var lhx1 = BtnCx - lineLen/2-1;var lhy1 = BtnCy-1;var lhx2 = BtnCx + lineLen/2-1;var lhy2 = BtnCy-1;//画横myPen.setStroke(2);myPen.setColor("#D0D0D0");myPen.drawLine(lhx1, lhy1, lhx2, lhy2);myPen.paint();//画竖var lsx1 = BtnCx-1;var lsy1 = BtnCy- lineLen/2-1;var lsx2 = BtnCx-1;var lsy2 = BtnCy + lineLen/2-1;myPen.setColor("#D0D0D0");myPen.drawLine(lsx1, lsy1, lsx2, lsy2);myPen.paint();myPen.setStroke(1);}//画缩放按钮-function drawZoomOutBtn(){ //时间宽度值 1min ,30min , 1h, 24h        //时间宽度值 1min ,30min , 1h, 24h        var timeWidth = timeWidthTbls[timeWidthTblIndex];        var startTime = curPlayTime - parseInt(timeWidth / 2);        var endTime = curPlayTime + parseInt(timeWidth / 2);        var maxHeight = canvasHeight;        var maxWidth = canvasWidth;//按钮中心坐标var BtnCx = maxWidth/10*9-50;var BtnCy = maxHeight/5;var BtnWidth = 20;var BtnHeight = 20;var BtnX = BtnCx - BtnWidth/2 ;var BtnY = BtnCy - BtnHeight/2 ;//画外圈myPen.setColor("#4F4F4F");myPen.fillRect(BtnX, BtnY, BtnWidth, BtnHeight);myPen.paint();var BtnWidth2 = 14;var BtnHeight2 = 14;var lineLen = 12;//动画效果if(mouseDownFlag==1){if(mousePosX>=BtnX && mousePosX <= BtnX+BtnWidth && mousePosY >=BtnY && mousePosY <= BtnY +BtnHeight){BtnWidth2 = 20;BtnHeight2 = 20;lineLen = 14;if (timeWidthTblIndex >= (timeWidthTblNum - 1)) {timeWidthTblIndex = timeWidthTblNum-1;}else {timeWidthTblIndex++;}//mouseclickFlag = 0;}}var BtnX2 = BtnCx - BtnWidth2/2 ;var BtnY2 = BtnCy - BtnHeight2/2 ;//画内圈myPen.setColor("#6C6C6C");myPen.fillRect(BtnX2, BtnY2, BtnWidth2, BtnHeight2);myPen.paint();var lhx1 = BtnCx - lineLen/2-1;var lhy1 = BtnCy;var lhx2 = BtnCx + lineLen/2-1;var lhy2 = BtnCy;//画横myPen.setStroke(2);myPen.setColor("#D0D0D0");myPen.drawLine(lhx1, lhy1, lhx2, lhy2);myPen.paint();myPen.setStroke(1);}    ///////////////////////////////////////////////////////////////////////////////////////////////////////    //鼠标按下事件,这是传统的事件绑定,它非常简单而且稳定,适应不同浏览器.e表示事件,this指向当前元素.    //但是这样的绑定只会在事件冒泡中运行,捕获不行.一个元素一次只能绑定一个事件函数.    myMouseCanvas.onmousedown = function (e) {        var e = window.event || e        var rect = this.getBoundingClientRect();        var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标        var mouseY = e.clientY - rect.top;        mouseZoomDownFlag = 1;        mouseDownFlag = 1;        mousePosX = mouseX;        mouseDownPlayTime = curPlayTime;    }    //鼠标松开    myMouseCanvas.onmouseup = function (e) {        mouseZoomDownFlag = 0;        if (mouseDownFlag) {            mouseUpPlayTime = curPlayTime;            //响应鼠标拖拽状态条            checkTimePeriods();            //重新定位开始播放时间            if (mouseUpPlayTime != mouseDownPlayTime)                setNewPlayStartTimeCallback();//alert("mouse up");            mouseDownFlag = 0;        }    };    //鼠标移动    myMouseCanvas.onmousemove = function (e) {        var e = window.event || e        var rect = this.getBoundingClientRect();        var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标        var mouseY = e.clientY - rect.top;        //dbgStr = "鼠标状态:" + mouseDownFlag + "鼠标坐标:" + mouseX + "," + mouseY;        //鼠标按下状态        if (mouseDownFlag) {            //alert("Mouse draging");            if (mousePosX - mouseX > 0) {                mouseMoveDir = 1;                mouseDownMoveStep = Math.abs(mousePosX - mouseX);                if (mouseDownMoveStep >= 2) {                    mousePosX = mouseX;                    curPlayTime = curPlayTime + timeWidthStepTbls[timeWidthTblIndex];                    //alert("Mouse left step:"+ mouseDownMoveStep);                }            }            else {                mouseMoveDir = 0;                mouseDownMoveStep = Math.abs(mousePosX - mouseX);                if (mouseDownMoveStep >= 2) {                    mousePosX = mouseX;                    curPlayTime = curPlayTime - timeWidthStepTbls[timeWidthTblIndex];                    //alert("Mouse right step:"+ mouseDownMoveStep);                }            }        }        //鼠标移动        mouseOverFlag = 1;        mousePosX = mouseX;        mousePosY = mouseY;    }    //鼠标移出区域    myMouseCanvas.onmouseout = function (e) {        //mouseDownFlag = 0;        //mouseOverFlag = 0;        //alert("Mouse out");    }    //鼠标进去区域    myMouseCanvas.onmouseover = function (e) {        var e = window.event || e        var rect = this.getBoundingClientRect();        var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标        var mouseY = e.clientY - rect.top;        mouseOverFlag = 1;        mousePosX = mouseX;        mousePosY = mouseY;        //mouseDownFlag = 0;        //alert("Mouse in");        this.style.cursor = "pointer";    }    myMouseCanvas.onmousewheel = function (e) {        //alert("Mouse wheel");                if (e == undefined)            e = window.event; // old IE support          var delta = e.wheelDelta / 120;        if (delta > 0) {            if (timeWidthTblIndex >= (timeWidthTblNum - 1)) {                timeWidthTblIndex = timeWidthTblNum-1;            }            else {                timeWidthTblIndex++;            }        }        else {            if (timeWidthTblIndex <=0) {                timeWidthTblIndex = 0;            }            else {                timeWidthTblIndex--;            }        }    }    //单击事件    myMouseCanvas.onclick = function (e) {        var e = window.event || e        var rect = this.getBoundingClientRect();        var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标        var mouseY = e.clientY - rect.top;        mousePosX = mouseX;        mousePosY = mouseY;        mouseclickFlag = 1;        //alert("click");    }    /*        双击事件在进度条上时获取不到,信号        处理方法,添加一层透明的div 于最上层 用于捕获鼠标事件    */    //双击事件    myMouseCanvas.ondblclick = function (e) {        var e = window.event || e        var rect = this.getBoundingClientRect();        var mouseX = e.clientX - rect.left; //获取鼠标在canvsa中的坐标        var mouseY = e.clientY - rect.top;        mousePosX = mouseX;        mousePosY = mouseY;        mousedblclickFlag = 1;      //  alert("double click");    }}
测试结果:




完整的项目下载路径:

http://download.csdn.net/detail/zhujinghao09/9634299

0 0
原创粉丝点击