123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- define([], function () {
- var video_stus = {
- //渲染div的id
- id: "",
- //时间轴移动的位置
- x: 0,
- //播放的当前页数
- nowPage: 0,
- //播放总页数
- dataCount: 0,
- //每秒移动的像素
- perTime: "",
- //播放间隔
- intervalTime: 800,
- //定时事件ID
- intervalId: null,
- //启报时间毫秒数
- qbTime: 0,
- //vti
- vti: ["000", "003", "006", "009", "012", "015", "018", "021", "024", "027", "030", "033",
- "036", "039", "042", "045", "048", "051", "054", "057", "060", "063", "066", "069",
- "072", "075", "078", "081", "084", "087", "090", "093", "096", "099", "102", "105",
- "108", "111", "114", "117", "120", "123", "126", "129", "132", "135", "138", "141",
- "144", "147", "150", "153", "156", "159", "162", "165", "168"]
- }
- //播放器初始化
- function init(id, callback) {
- video_stus.id = id;
- // $("#" + id).html(video);
- video_stus.dataCount = video_stus.vti.length - 1;
- initVti();
- meaurePerTime();
- bingEvents();
- if (typeof callback === "function") {
- callback.call();
- }
- //设置最初默认时间
- clearTime();
- }
- //设置最大vti值
- function initVti() {
- $(".meteo-video-progress-lasttime").html(video_stus.vti[video_stus.vti.length - 1]);
- $(".meteo-video-progress-nowtime").html(video_stus.vti[0]);
- $(".meteo-title-left-c").html("大气海洋数值预报-<span style='color:#03e3fa;font-weight: 800'></span>");
- }
- //计算纵轴单个刻度长度
- function meaurePerTime() {
- var proWidth = $(".meteo-video-progress").width();
- video_stus.perTime = proWidth / (video_stus.vti.length - 1);
- }
- //设置起报时间
- function setQbTime(time) {
- if (time == null) {
- time = new Date().getTime();
- }
- var qbTime = getQbTimeStr(time);
- var t = qbTime.split(' ');
- var t1 = t[0].split('-');
- var t2 = t[1].split(':');
- var now = new Date();
- now.setFullYear(t1[0], t1[1] - 1, t1[2]);
- now.setHours(t2[0], 0, 0);
- video_stus.qbTime = now.getTime();
- $("#meteo-video-query-startDate").val(qbTime);
- }
- //更换起报时间
- function updateQbTime() {
- stop();
- var startDate = $("#meteo-video-query-startDate").val();
- var t = startDate.split(' ');
- var t1 = t[0].split('-');
- var t2 = t[1].split(':');
- var newQbTime = new Date();
- newQbTime.setFullYear(t1[0], t1[1] - 1, t1[2]);
- newQbTime.setHours(t2[0], 0, 0);
- newQbTime = newQbTime.getTime();
- setQbTime(newQbTime);
- setVti(0); //更换起报时间时,重置vti为0
- }
- function clearTime() { //设置距离当前时间最近的起报时间
- var date = new Date(); //取当前时间
- date = new Date("2018/7/13 05:00"); //todo 默认时间修改为样例数据时间
- var qbDate = new Date().setTime(date.getTime() - 10800000); //当前时间3小时前为起报时间
- //10800000 = 3 * 60 * 60 * 1000
- setQbTime(qbDate);
- var hours = (date - video_stus.qbTime) / 3600000; //根据当前时间及最近起报时间算出小时差值
- //3600000 = 60 * 60 * 1000
- var index = (hours / 3) >> 0; //计算vti索引
- setVti(index);
- }
- //按钮绑定事件
- function bingEvents() {
- //上一个
- $(".meteo-video-btn-back").off("click").on("click", function () {
- back();
- });
- //播放
- $(".meteo-video-btn-play").off("click").on("click", function () {
- if (!video_stus.intervalId) { //播放
- play();
- } else { //暂停
- stop();
- }
- });
- //下一个
- $(".meteo-video-btn-next").off("click").on("click", function () {
- next();
- });
- //进度轴时间点
- $(".meteo-video-progress_btn").off("mousedown").on("mousedown", function (event) {
- stop();
- var yuanleft = 0;
- var leftVal = event.clientX - this.offsetLeft - event.offsetX;
- var width = $(".meteo-video-progress").width();
- var pt = video_stus.perTime / 2;
- document.onmousemove = function (event) {
- var event = event || window.event;
- yuanleft = event.clientX - leftVal;
- if (yuanleft < 0) yuanleft = 0;
- if (yuanleft > width) yuanleft = width;
- var index = ((yuanleft + pt) / video_stus.perTime) >> 0;
- if (index != video_stus.nowPage) setVti(index);
- window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
- }
- document.onmouseup = function () {
- document.onmousemove = null; //弹起鼠标不做任何操作
- }
- })
- }
- function play() {
- if (video_stus.nowPage == video_stus.vti.length - 1) return;
- if (video_stus.intervalId) stop();
- $(".meteo-video-btn-play").removeClass("meteo-video-play-img");
- $(".meteo-video-btn-play").addClass("meteo-video-parse-img");
- video_stus.intervalId = window.setInterval(playNext, video_stus.intervalTime);
- }
- function playNext() {
- setVti(video_stus.nowPage + 1);
- if (video_stus.nowPage >= video_stus.vti.length - 1) {
- stop();
- return;
- }
- }
- function stop() {
- if (!video_stus.intervalId) return;
- $(".meteo-video-btn-play").removeClass("meteo-video-parse-img");
- $(".meteo-video-btn-play").addClass("meteo-video-play-img");
- clearInterval(video_stus.intervalId);
- video_stus.intervalId = null;
- }
- //时间格式化
- function getTimeStr(d) {
- var now = new Date(d);
- var year = now.getFullYear();
- var month = (now.getMonth() + 1) < 10 ? '0' + (now.getMonth() + 1) : (now.getMonth() + 1);
- var date = now.getDate() < 10 ? '0' + now.getDate() : now.getDate();
- var hours = now.getHours() < 10 ? '0' + now.getHours() : now.getHours();
- // var minutes = now.getMinutes() < 10 ? '0' + now.getMinutes() : now.getMinutes();
- // var seconds = now.getSeconds() < 10 ? '0' + now.getSeconds() : now.getSeconds();
- return year + '-' + month + '-' + date + ' ' + hours + ':00';//+ minutes+':'+seconds;
- }
- //时间格式化(起报时间)
- function getQbTimeStr(d) {
- var time = new Date(d);
- var hour = time.getHours();
- var vtiHour = "08";
- if (hour < 8) {
- vtiHour = "20";
- d = d - 60 * 1000 * 60 * 24;
- } else if (hour < 20) {
- vtiHour = "08"
- } else {
- vtiHour = "20";
- }
- var now = new Date(d);
- var year = now.getFullYear();
- var month = (now.getMonth() + 1) < 10 ? '0' + (now.getMonth() + 1) : (now.getMonth() + 1);
- var date = now.getDate() < 10 ? '0' + now.getDate() : now.getDate();
- return year + '-' + month + '-' + date + ' ' + vtiHour + ':00';
- }
- //调整按钮样式
- function btnDisabled() {
- if (video_stus.nowPage > 0) {
- $(".meteo-video-btn-next").removeClass("meteo-video-next-img");
- $(".meteo-video-btn-next").addClass("meteo-video-next-img-blue");
- $(".meteo-video-btn-back").removeClass("meteo-video-back-img");
- $(".meteo-video-btn-back").addClass("meteo-video-back-img-blue");
- if (video_stus.nowPage >= video_stus.vti.length - 1) {
- $(".meteo-video-btn-next").removeClass("meteo-video-next-img-blue");
- $(".meteo-video-btn-next").addClass("meteo-video-next-img");
- }
- } else {
- $(".meteo-video-btn-next").removeClass("meteo-video-next-img");
- $(".meteo-video-btn-next").addClass("meteo-video-next-img-blue");
- $(".meteo-video-btn-back").removeClass("meteo-video-back-img-blue");
- $(".meteo-video-btn-back").addClass("meteo-video-back-img");
- }
- }
- function next() {
- stop(); //点击下一时次按钮时,先停止播放
- setVti(video_stus.nowPage + 1);
- }
- function back() {
- stop(); //点击上一时次按钮时,先停止播放
- setVti(video_stus.nowPage - 1);
- }
- function setVti(index) { //设置当前显示的vti
- if (isNaN(index)) index = 0;
- if (index >= video_stus.vti.length) return;
- if (index < 0) return;
- video_stus.nowPage = index;
- video_stus.x = video_stus.nowPage * video_stus.perTime;
- $(".meteo-video-progress_btn").css("left", video_stus.x - 12);
- $(".meteo-video-progress-nowtime").html(video_stus.vti[video_stus.nowPage]);
- var nowdate = getTimeStr(video_stus.qbTime + parseInt(video_stus.vti[video_stus.nowPage]) * 60 * 60 * 1000);
- $(".meteo-title-left-c span").html(nowdate);
- btnDisabled();
- timeChangeEvent();
- }
- return ONEMAP.M.video = {
- init: init,
- updateQbTime: updateQbTime,
- clearTime: clearTime,
- stop: stop
- }
- //当前时间改变
- function timeChangeEvent() {
- if (meteo.c.time)
- meteo.c.time.timeUpdate();
- }
- })
|