define(['core', 'tpl','./video.js'], function (core, tpl,video) { window['videojs'] = video; var modal = { wsClient: false, wsConfig: {}, wsConnected: false, wsBanned: {all: false, self: false}, status: 0, realOnline: 0, showOnline: 0, wsCanAt: false, wsCanRepeal: false, msgAt: {}, lastliketime: 0, inputTip: ['跟大家说点什么吧...', '点击键盘回车也可发送信息哦~'] }; modal.init = function (params) { require(['../addons/ewei_shopv2/plugin/live/static/js/videojs-contrib-hls.js'], function (videojs) { modal.initInternal(params); }); }; modal.initInternal = function (params) { modal.wsConfig = params.wsConfig || {}; modal.roomid = modal.wsConfig.roomcount; modal.initWs(); modal.initClick(); modal.initPlayer(); modal.initNotice(); // 处理安卓播放中跳转后返回 if(modal.wsConfig.isMobile && !modal.wsConfig.isIos){ modal.x5videoexitfullscreen(); } setInterval(function () { var tipIndex = Math.floor(Math.random() * 3); if (tipIndex == 2 && !modal.wsCanAt) { tipIndex == 1 } $('#input').attr('placeholder', modal.inputTip[tipIndex]); if (modal.wsConnected) { modal.wsSend('communication', {toUser: 'system'}); modal.clickLike(); }else{ modal.initWs(); } }, 8000); //隐藏对话 $(".btn-hide").off("click").on("click",function () { $(".tab-content").hide(); $(".btn-hide").hide(); $(".btn-show").show(); }); $(".btn-show").off("click").on("click",function () { $(".tab-content").show(); $(".btn-hide").show(); $(".btn-show").hide(); }); //判断IOS版本兼容 var ver = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); if (ver){ ver = parseInt(ver[1], 10); if(ver>=10){ $(".block-video").css("z-index","10"); return; } } }; modal.initPlayer = function () { // 初始化播放器 modal.initMyPlayer(); // 处理播放器位置 var playerHeight = $('body').width() * 0.56; if (!$('.fui-content').hasClass('fullscreen')) { setTimeout(function () { $('.block-video').css('height', playerHeight + 'px'); // $('.prompt').css('height', playerHeight + 'px'); $('.prompt').css({height:playerHeight + 'px',position:'fixed',zIndex:'99',width:'100%'}); $('.block-content').css('top', playerHeight + $('.block-tab').height() + 'px'); $('.block-notice').css('top', playerHeight + $('.block-tab').height() + 'px') }, 100); } var player = $('#player_html5_api')[0]; if (!modal.wsConfig.isMobile || modal.wsConfig.isIos) { return } //进入全屏时触发 player.addEventListener("x5videoenterfullscreen", function () { $('.fui-content').addClass('player-fullscreen'); var playerHeight = $('body').width() * 0.56; if (!$('.fui-content').hasClass('fullscreen')) { $('.block-video').css('height', 'auto'); $('#player_html5_api').css({ objectPosition:'0px '+$('.block-title').height()+'px', }); $('.prompt').css('height', 'auto'); $('.block-tab').css('top', $('.block-title').height() + playerHeight + 'px'); $('.block-content').css('top', $('.block-title').height() + playerHeight + $('.block-tab').height() + 'px'); $('.block-content').css('position', 'fixed'); $('.block-notice').css('top', $('.block-title').height() + playerHeight + $('.block-tab').height() + 'px'); } }); //退出全屏时触发 player.addEventListener("x5videoexitfullscreen", function () { modal.x5videoexitfullscreen(); }) }; modal.initMyPlayer = function () { modal.myPlayer = window.videojs('player',{ bigPlayButton : false, textTrackDisplay : false, posterImage: true, errorDisplay : false, controlBar : false, autoplay:true, },function(){ console.log(this); this.on('loadedmetadata',function(){ console.log('loadedmetadata'); //加载到元数据后开始播放视频 modal.startVideo(); }) this.on('ended',function(){ console.log('ended') }) this.on('firstplay',function(){ console.log('firstplay'); var tryTimes = 0; clearInterval(modal.isFirstplay); modal.isFirstplay = setInterval(function(){ console.log('waiting'+tryTimes); var currentTime = modal.myPlayer.currentTime(); if(currentTime == 0){ //此时视频已卡主3s modal.myPlayer.play(); //尝试6次播放后,如仍未播放成功提示 if(++tryTimes >= 6){ FoxUI.toast.show('您的网速有点慢,请在自动刷新之后重新点击观看!'); tryTimes = 0; var url = $('#player').attr('src'); $.get(url, function(){}); window.location.reload(); } }else{ clearInterval(modal.isFirstplay); tryTimes = 0; } },1000); }) this.on('loadstart',function(){ //开始加载 console.log('loadstart') }) this.on('loadeddata',function(){ console.log('loadeddata'); $('.btn-play').hide(); }) this.on('seeking',function(){ //正在去拿视频流的路上 console.log('seeking') }) this.on('seeked',function(){ //已经拿到视频流,可以播放 console.log('seeked') }) this.on('waiting',function(){ console.log('waiting'); var tryTimes = 0; clearInterval(modal.isWaiting); modal.isWaiting = setInterval(function(){ console.log('waiting'+tryTimes); var currentTime = modal.myPlayer.currentTime(); if(currentTime == 0){ //此时视频已卡主3s modal.myPlayer.play(); //尝试6次播放后,如仍未播放成功提示 if(++tryTimes >= 6){ FoxUI.toast.show('您的网速有点慢,请在自动刷新之后重新点击观看!'); tryTimes = 0; var url = $('#player').attr('src'); $.get(url, function(){}); window.location.reload(); } }else{ clearInterval(modal.isWaiting); tryTimes = 0; } },1000); // modal.myPlayer.play(); }) this.on('pause',function(){ console.log('pause') }) this.on('play',function(){ console.log('play'); }) this.on('error',function(){ console.log('error'); }) }); }; modal.x5videoexitfullscreen = function () { var playerHeight = $('body').width() * 0.56; $('.block-tab').css('top', playerHeight + 'px'); $('.block-content').css('top', playerHeight + $('.block-tab').height() + 'px'); $('.fui-content').removeClass('player-fullscreen'); if($('.fui-content').hasClass('fullscreen')){ $('.block-notice').css('top', '100px'); }else { $('.block-notice').css('top', playerHeight + $('.block-tab').height() + 'px'); $('.prompt').css('height', playerHeight + 'px'); $('.block-video').css('height', playerHeight + 'px'); $('#player_html5_api').css({ objectPosition:'0px 0px', }); }; $('.btn-play').show(); }; modal.initWs = function () { if (!modal.wsConfig) { modal.liveMsg('notice', '通讯服务器配置错误'); return } else { $('.block-input .input-place').html('初始化通讯服务...').show().siblings().hide() } var wsConfig = modal.wsConfig; var wsClient = new WebSocket(wsConfig.address); wsClient.onopen = function () { modal.wsSend('login', {toUser: 'system'}) }; wsClient.onmessage = function (evt) { var data = JSON.parse(evt.data); console.log(data); if (data.type == 'connected') { FoxUI.toast.show('连接成功'); $('.block-input .input-place').html('').hide().siblings().show(); modal.wsConnected = true; modal.wsBanned = data.banned; if (data.banned.all == 1) { modal.liveMsg('notice', '管理员禁止任何人发言') } else if (data.banned.self != '') { modal.liveMsg('notice', '你被管理员禁止发言') } modal.status = data.settings.status; modal.wsCanAt = data.settings.canat == 1 ? true : false; modal.wsCanRepeal = data.settings.canrepeal == 1 ? true : false; modal.realOnline = data.online || 0; modal.showOnline = data.settings.virtual || 0; modal.initStatus(); modal.initOnline(); if (modal.wsCanAt) { modal.inputTip.push('点击蓝色昵称可@Ta') } else { modal.inputTip.splice(2, 1) } if (modal.wsCanRepeal) { $('.btn-repeal').addClass('show') } else { $('.btn-repeal').removeClass('show') } setTimeout(function () { modal.scrollBottom() }, 10) } else if (data.type == 'notice') { modal.liveMsg('notice', data.text) } else if (data.type == 'setting') { var settings = data.settings; if (!settings) { return } if (modal.status != settings.status) { modal.status = settings.status; modal.initStatus() } if (modal.showOnline != settings.virtual) { modal.showOnline = settings.virtual; modal.initOnline() } modal.wsCanAt = settings.canat == 1 ? true : false; modal.wsCanRepeal = settings.canrepeal == 1 ? true : false; if (modal.wsCanAt) { modal.inputTip.push('点击蓝色昵称可@Ta') } else { modal.inputTip.splice(2, 1) } if (modal.wsCanRepeal) { $('.btn-repeal').addClass('show') } else { $('.btn-repeal').removeClass('show') } if (settings.nickname_old) { modal.liveMsg('notice', '管理员"' + settings.nickname_old + '"更名为"' + settings.nickname + '"') } } else if (data.type == 'userEnter') { if (data.role != 'manage') { modal.userEnter(data.nickname) } modal.realOnline++; modal.initOnline() } else if (data.type == 'userLeave') { modal.realOnline--; modal.initOnline() } else if (data.type == 'text' || data.type == 'sent') { modal.liveMsg('text', data) } else if (data.type == 'image') { modal.liveMsg('image', data) } else if (data.type == 'repeal') { if (data.msgid) { var text = '"' + data.nickname + '"'; if (data.fromUser == modal.wsConfig.uid) { text = '你' } var fullscreen = ''; if (modal.wsConfig.fullscreen) { fullscreen += 'nopadding' } $('.tab-content .msg[data-msgid="' + data.msgid + '"]').addClass(fullscreen).html('
' + text + '撤回了一条消息
') } } else if (data.type == 'delete') { if (data.msgid) { var text = '"' + data.deleteNick + '"撤回了一条消息'; if (data.deleteUid == modal.wsConfig.uid) { text = '管理员"' + data.nickname + '"删除了你的一条消息' } var fullscreen = ''; if (modal.wsConfig.fullscreen) { fullscreen += 'nopadding' } $('.tab-content .msg[data-msgid="' + data.msgid + '"]').addClass(fullscreen).html('
' + text + '
') } } else if (data.type == 'banned') { if (data.banned == 1) { modal.wsBanned.self = true; modal.liveMsg('notice', '你被管理员禁止发言'); $('.btn-send').removeClass('active') } else { if (modal.wsBanned.all == '') { var value = $.trim($('#input').val()); if (value) { $('.btn-send').addClass('active') } } modal.wsBanned.self = false; modal.liveMsg('notice', '你被管理员允许发言') } } else if (data.type == 'bannedAll') { if (data.banned == 1) { $('.btn-send').removeClass('active'); modal.wsBanned.all = true; modal.liveMsg('notice', '管理员禁止任何人发言'); $('.btn-send').removeClass('active') } else { if (modal.wsBanned.self == '') { var value = $.trim($('#input').val()); if (value) { $('.btn-send').addClass('active') } } modal.wsBanned.all = false; modal.liveMsg('notice', '管理员解除全体禁言') } } else if (data.type == 'clicklike') { modal.clickLike() } else if (data.type == 'goods') { //删除前面带的://app/ data.goodsUrl = data.goodsUrl.substring(6); modal.liveGoods(data) } else if (data.type == 'redpack') { modal.liveMsg('redpack', data) } else if (data.type == 'redpackget') { if (data.prestatus == 0) { FoxUI.toast.show('红包不存在或已过期') } else if (data.prestatus == 1) { $('.layer-mask').fadeIn(200); $('.layer-redpack').addClass('in open').find('.price').html('' + data.money) } else if (data.prestatus == 2) { $('.layer-redpack .redpack-info .price').addClass('small').html('手速慢太慢了,没抢到..'); $('.msg .content .redpack[data-pushid="' + data.redpackid + '"]').addClass('drew').find('.desc').text('已抢光'); $('.layer-mask').fadeIn(200); $('.layer-redpack').addClass('in open') } else if (data.prestatus == 3) { $('.layer-mask').fadeIn(200); $('.layer-redpack').removeClass('open').addClass('in') } modal.initRedpackList(data.list); FoxUI.loader.hide(); $(document).find('.redpack[data-pushid="' + data.redpackid + '"]').removeClass('stop') } else if (data.type == 'redpackdraw') { if (data.status == 0) { setTimeout(function () { $('.layer-redpack').removeClass('in'); $('.layer-mask').fadeOut(200); FoxUI.loader.show('领取失败', 'icon icon-cry'); $('.layer-redpack .redpack-draw').removeClass('rotate'); setTimeout(function () { FoxUI.loader.hide() }, 1500) }, 1500) } else if (data.status == 1 || data.status == 3) { setTimeout(function () { if (data.status == 3) { $('.msg .content .redpack[data-pushid="' + data.redpackid + '"]').addClass('drew').find('.desc').text('已领取') } $('.layer-mask').fadeIn(200); $('.layer-redpack').addClass('in open').find('.price').html('' + data.money); $('.layer-redpack .redpack-draw').removeClass('rotate') }, 1500) } else if (data.status == 2) { setTimeout(function () { $('.layer-redpack .redpack-info .price').addClass('small').html('手速慢太慢了,没抢到..'); $('.layer-mask').fadeIn(200); $('.layer-redpack').addClass('in open'); $('.layer-redpack .redpack-draw').removeClass('rotate') }, 1500) } modal.initRedpackList(data.list); $('.layer-redpack').removeClass('stop') } else if (data.type == 'coupon') { modal.liveMsg('coupon', data) } else if (data.type == 'coupondraw') { if (data.status == 0) { FoxUI.loader.show('领取失败', 'icon icon-cry'); setTimeout(function () { FoxUI.loader.hide() }, 1000) } else if (data.status == 1 || data.status == 3) { if (data.status == 3) { $('.msg .content .coupon[data-pushid="' + data.couponid + '"]').addClass('drew').find('.desc').text('已领取') } $('.layer-mask').fadeIn(200); $('.layer-coupon .coupon-title').text('优惠券已到账'); var html = ''; if (data.couponvaluetext == 0) { html += '¥' } html += '' + data.couponvaluetotal + ''; if (data.couponvaluetext != 0) { html += data.couponvaluetext } $('.layer-coupon .price').html(html); $('.layer-coupon .desc').html(data.couponuselimit || '无使用条件'); $('.layer-coupon').removeClass('roomcoupon').removeClass('fail').addClass('in') } else if (data.status == 2) { $('.layer-mask').fadeIn(200); $('.layer-coupon .coupon-title').text('很遗憾,没抢到'); $('.layer-coupon').addClass('fail').addClass('in') } } }; wsClient.onclose = function (evt) { if (!modal.wsConnected) { return } $('.block-input .input-place').html('与通讯服务器断开 点击重连').show().siblings().hide(); modal.wsConnected = false }; wsClient.onerror = function (evt) { $('.block-input .input-place').html('与通讯服务器连接失败 点击重连').show().siblings().hide(); modal.wsConnected = false }; modal.wsClient = wsClient }; modal.wsSend = function (type, obj) { if (!type || $.isEmptyObject(obj)) { return false } if (type != 'login') { if (!modal.wsConnected) { FoxUI.toast.show('通讯服务器连接失败'); return false } if (type != 'redpackget' && type != 'redpackdraw' && type != 'coupondraw' && type != 'communication') { if (modal.wsBanned.all == 1) { FoxUI.toast.show('管理员禁止任何人发言'); return false } if (modal.wsBanned.self != '') { FoxUI.toast.show('你被管理员禁止发言'); return false } } } var wsConfig = modal.wsConfig; obj.type = type; obj.scene = 'live'; obj.roomid = wsConfig.roomid; obj.uniacid = wsConfig.uniacid; obj.uid = wsConfig.uid; obj.nickname = wsConfig.nickname; if (!$.isEmptyObject(modal.msgAt)) { obj.at = modal.msgAt; obj = modal.handleAtText(obj) } modal.wsClient.send(JSON.stringify(obj)); return obj }; modal.liveMsg = function (type, obj) { var atText = '', fullscreen = ''; if (obj.atUsers && !$.isEmptyObject(obj.atUsers)) { $.each(obj.atUsers, function (uid, nickname) { atText += '@' + nickname + ' ' }) } if (type == 'image') { obj.text = modal.tomedia(obj.text); obj.text = '' } else if (type == 'text' && obj.text) { if (obj.text.indexOf("[") > -1 && obj.text.indexOf("]") > -1) { var res = obj.text.match(/\[([^\]]+)\]/g); if (res) { $.each(res, function (index, val) { var text = val.replace('[', ''); text = text.replace(']', ''); var elm = $('.block-emoji .item[title="' + text + '"]'); if (elm.length > 0) { if (elm.data('index')) { var face = ''; obj.text = obj.text.replace(val, face) } } }) } } } else if (type == 'redpack') { var redpackTitle = obj.redpack.title || '红包来袭,手慢无!'; obj.text = '

' + redpackTitle + '

点击领取

'; if (modal.wsConfig.fullscreen) { fullscreen += 'nopadding' } } else if (type == 'coupon') { var couponTitle = obj.coupon.title || '优惠券来袭,手慢无!'; obj.text = '
' + couponTitle + '
'; if (modal.wsConfig.fullscreen) { fullscreen += 'nopadding' } } var html = ''; html += '
'; if (type == 'notice') { html += '系统提醒:' + obj } else { if (obj.self) { obj.nickname += '(你)'; if (modal.wsCanRepeal) { obj.text += ' ' } else { obj.text += ' ' } } if (type != 'redpack' || !modal.wsConfig.fullscreen) { html += '
' + obj.nickname + ':
' } html += '
' + atText + obj.text + '
' } html += '
'; $('.tab-content[data-tab="interaction"]').append(html); if (type == 'redpack') { $('.block-content .msg[data-msgid="' + obj.msgid + '"]').find('.redpack').click(); $('.layer-coupon').removeClass('in') } if (type != 'redpackget' && type != 'redpackdraw' && type != 'coupondraw') { modal.scrollBottom() } }; modal.liveGoods = function (obj) { var fullscreen = ''; if (modal.wsConfig.fullscreen) { fullscreen += 'nopadding' } var html = ''; html += '
'; html += '
' + obj.goodsTitle + '
'; html += '
¥' + obj.goodsPrice + '
购买
'; html += '
'; $('.tab-content[data-tab="interaction"]').append(html); modal.scrollBottom() }; modal.liveAt = function (nickname, msgid) { if (!nickname || !msgid) { return } var elm = $('.layer-at'); if (elm.hasClass('in')) { clearTimeout(modal.liveAtEnd) } $('.layer-at .at-text').text(nickname + '@了你'); $('.layer-at').addClass('in').data('msgid', msgid); modal.liveAtEnd = setTimeout(function () { elm.removeClass('in').data('msgid', 0).find('.at-text').text('') }, 10000) }; modal.handleAtText = function (obj) { if (obj.text == '' || !obj.at || $.isEmptyObject(obj.at)) { return } $.each(obj.at, function (key, val) { obj.text = obj.text.replace('@' + val + ': ', '') }); return obj }; modal.userEnter = function (nickname) { if (!nickname) { return } var elm = $('.layer-enter'); if (elm.hasClass('in')) { clearTimeout(modal.enterEnd) } elm.removeClass('out'); elm.addClass('in').find('.name').text(nickname); modal.enterEnd = setTimeout(function () { elm.removeClass('in').addClass('out').find('.name').text(''); setTimeout(function () { elm.removeClass('out') }, 400) }, 2500) }; modal.initStatus = function () { if (modal.status == 1) { $('.live-tips.play').show().siblings('.live-tips').hide() } else if (modal.status == 2) { $('.live-tips.pause').show().siblings('.live-tips').hide(); // $('#player')[0].pause() modal.myPlayer.pause(); } else { $('.live-tips.stop').show().siblings('.live-tips').hide(); // $('#player')[0].pause() modal.myPlayer.pause(); } }; modal.initOnline = function () { var online = parseInt(modal.realOnline) + parseInt(modal.showOnline); if (online > 10000) { online = (online / 10000).toFixed(2); online += '万' } $('#online').text(online) }; modal.initVideo = function (status) { if (status == 'pause') { alert('暂停直播/显示暂停提示') } else if (status == 'stop') { alert('停止直播/显示直播未开始提示') } else { alert('开始直播') } }; modal.initClick = function () { $(document).on('click', '.btn-reconnect', function () { if (modal.wsConnected) { FoxUI.toast.show('当前已连接,如还提示请刷新'); return } modal.initWs() }); $('.block-tab a').click(function () { if ($(this).attr('href') != 'javascript:void(0);') { return } ; var tab = $(this).data('tab'); $(this).addClass('active').siblings().removeClass('active'); $('.block-content .tab-content[data-tab="' + tab + '"]').show().siblings('.tab-content').hide(); if (tab == 'interaction') { $('.block-icon').show(); $('.block-notice').css('opacity', 1) } else { $('.block-icon').hide(); $('.block-notice').css('opacity', 0) } }); $('.btn-play').click(function () { var url = $('#player').attr('src'); if (url == '') { FoxUI.toast.show('视频获取失败或未设置'); return }; // $('#player').get(0).play(); modal.myPlayer.play(); $('.live-tips').hide(); // var url = $(this).data('url'); // $.ajax({ // url: url, // type: "GET", // timeout: 1000, // complete : function(XMLHttpRequest,status){ //请求完成后最终执行参数 // if(status=='timeout'){//超时,status还有success,error等值的情况 // modal.myPlayer.play(); // } // } // }); }); $('#player')[0].addEventListener("ended", function () { $('.live-tips.play').show().siblings('.live-tips').hide() }); $("#input").off("click").on("click",function () { if (document.documentElement.clientHeight < document.documentElement.offsetHeight){ $(this).focus(function () { if (document.documentElement.clientHeight < document.documentElement.offsetHeight){ $('body').animate({scrollTop: "10000px"}, 500); } $('.block-input').addClass('focus') }); } }); /*$('#input').focus(function () { if (document.documentElement.clientHeight < document.documentElement.offsetHeight){ $('body').animate({scrollTop: "10000px"}, 500); } $('.block-input').addClass('focus') });*/ $('#input').blur(function () { if ($('.fui-content').hasClass('show-emoji')) { return } $('.block-input').removeClass('focus') }); $('#input').keydown(function (event) { if (event.keyCode == 8) { var textValue = ''; var textObj = $(this).get(0); if (textObj.setSelectionRange) { var rangeStart = textObj.selectionStart; var rangeEnd = textObj.selectionEnd; var delValue = textObj.value.substring(rangeStart - 1, rangeStart); var tempStr1 = textObj.value.substring(0, rangeStart - 1); var tempStr2 = textObj.value.substring(rangeEnd); textValue = tempStr1 + tempStr2; if (delValue == "]" && tempStr1.indexOf("[") > -1) { var res = tempStr1.match(/(\[[\u4E00-\u9FA5]*)$/g); textValue = tempStr1.substring(0, tempStr1.lastIndexOf("[")) + tempStr2 } else if (delValue == " " && tempStr1.indexOf("@") > -1) { textValue = tempStr1.substring(0, tempStr1.lastIndexOf("@")) + tempStr2; modal.msgAt = {} } textObj.value = textValue; textObj.focus(); textObj.setSelectionRange(rangeStart - 1, rangeStart - 1); return false } else { return true } } else if (event.keyCode == 13) { var value = $.trim($("#input").val()); if (!value) { FoxUI.toast.show('不能发送空消息'); return } var msg = modal.wsSend('text', {toUser: 'all', text: value}); if (msg) { $(this).removeClass('active'); $("#input").val(''); modal.msgAt = {} } $('.fui-content').removeClass('show-emoji') } }); $('#input').on('input propertychange, change', function () { var value = $.trim($(this).val()); if (value != '' && modal.wsConnected && modal.wsBanned.all != 1 && modal.wsBanned.self != 1) { $(".btn-send").addClass('active') } else { $(".btn-send").removeClass('active') } }); $(document).on('click', '.block-content .msg .btn-repeal', function () { if (!modal.wsCanRepeal) { FoxUI.toast.show('管理员禁止撤回消息') } var msgid = $(this).closest('.msg').data('msgid'); FoxUI.confirm('确定要撤回此条消息吗?', function () { modal.wsSend('repeal', {toUser: 'system', msgid: msgid}) }) }); $(document).on('click', '.block-content .msg .nickname', function () { if ($(this).hasClass('noat')) { return } if (!modal.wsCanAt) { FoxUI.toast.show('管理员禁止@用户'); return } if (!$.isEmptyObject(modal.msgAt)) { FoxUI.toast.show('每次只能@一位用户'); return } var nickname = $.trim($(this).data('nickname')); var uid = $(this).data('uid'); if ($(this).hasClass('self')) { FoxUI.toast.show('你不能@自己'); return } modal.msgAt[uid] = nickname; modal.insertAtCaret('#input', "@" + nickname + ": ") }); $('.btn-emoji').click(function () { if ($('.fui-content').hasClass('show-emoji')) { $('.block-input').removeClass('focus') } else { $('.block-input').addClass('focus') } $('.fui-content').toggleClass('show-emoji'); $(this).toggleClass('active'); modal.scrollBottom() }); $(".block-emoji .item").click(function () { var id = $(this).attr('title'); modal.insertAtCaret('#input', '[' + id + ']') }); $('.btn-like').click(function () { if (!modal.wsConnected) { return } modal.clickLike(); var time = new Date().getTime(); if (modal.lastliketime + 10000 >= time) { return } modal.lastliketime = time; modal.wsSend('clicklike', {toUser: 'system'}) }); $('.btn-plus').click(function () { $('.fui-content').toggleClass('show-plus'); modal.scrollBottom() }); $('.btn-send').on('touchstart', function () { var value = $.trim($("#input").val()); if (!value) { FoxUI.toast.show('不能发送空消息'); return } var msg = modal.wsSend('text', {toUser: 'all', text: value}); if (msg) { $(this).removeClass('active'); $("#input").val(''); modal.msgAt = {} } $('.fui-content').removeClass('show-emoji'); $('.block-input .input .btn-emoji').removeClass('active') }); $('.layer-roominfo .room-btn').click(function () { var _this = $(this); var roomid = _this.data("roomid"); core.json('live/room/favorite', {'roomid': roomid}, function (ret) { if (ret.status == 0) { FoxUI.loader.show(ret.result.message, 'icon icon-cry'); setTimeout(function () { FoxUI.loader.hide() }, 1000); return } if (ret.result.favorite == 0) { $('.btn-favorite').removeClass('disabled').text('订阅'); _this.removeClass('disabled').text('点击订阅'); FoxUI.loader.show('取消订阅成功', 'icon icon-check') } else { $('.btn-favorite').addClass('disabled').text('取消'); _this.addClass('disabled').text('取消订阅'); FoxUI.loader.show('订阅成功', 'icon icon-check') } setTimeout(function () { FoxUI.loader.hide() }, 1000) }, true, true) }); $('.layer .layer-close').click(function () { var layer = $(this).closest('.layer'); $('.layer-mask').fadeOut(200); if (layer.hasClass('in')) { layer.removeClass('in'); if (layer.hasClass('layer-at')) { clearTimeout(modal.liveAtEnd) } } else { $(this).closest('.layer').fadeOut(200) } $('.layer-mask').fadeOut(200) }); $('.live-info').click(function () { $('.layer-mask').fadeIn(200); $('.layer-roominfo').addClass('in') }); $(document).on('click', '.block-content .msg .redpack', function () { var title = $.trim($(this).data('title')); var pushid = $(this).data('pushid'); if (pushid == '') { FoxUI.toast.show('参数错误'); return } if ($(this).hasClass('stop')) { return } $('.layer-redpack').attr('data-pushid', pushid); $(this).addClass('stop'); FoxUI.loader.show('loading'); modal.wsSend('redpackget', {toUser: 'system', pushid: pushid, openid: modal.wsConfig.openid}); $('.layer-redpack .redpack-title').text(title) }); $(document).on('click', '.block-content .msg .coupon', function () { var title = $.trim($(this).text()); var pushid = $(this).data('pushid'); if (pushid == '') { FoxUI.toast.show('参数错误'); return } if ($(this).hasClass('stop')) { return } modal.wsSend('coupondraw', { toUser: 'system', pushid: pushid, openid: modal.wsConfig.openid, siteroot: modal.wsConfig.siteroot }) }); $('.btn-link').click(function () { var url = $(this).data('url'); if ($('#liveframe').length < 1) { $('.fui-content').append('') } $('#liveframe').attr('src', url).show() }); $('.layer-redpack .redpack-draw').click(function () { if (!modal.wsConnected) { FoxUI.toast.show('通讯服务器连接失败'); return false } var _this = $(this), redpack = $(this).closest('.layer-redpack'); if (_this.hasClass('rotate')) { return } var pushid = redpack.attr('data-pushid'); if (pushid == '') { FoxUI.toast.show('参数错误'); return } redpack.attr('data-pushid', pushid); _this.addClass('rotate'); redpack.addClass('stop'); modal.wsSend('redpackdraw', { toUser: 'system', pushid: pushid, openid: modal.wsConfig.openid, siteroot: modal.wsConfig.siteroot }) }); $('.btn-goods').click(function () { $('.layer-mask').fadeIn(200); $('.layer-goods .inner').css('height', $('.layer-goods').height() + 'px'); $('.layer-goods').show().addClass('in') }); $('.btn-gifts').click(function () { $('.layer-mask').fadeIn(200); $('.layer-gifts').addClass('in') }); $('.btn-goon').click(function () { $('.layer-mask').fadeIn(200); $('.layer-gifts').addClass('in'); $('.layer-coupon').removeClass("in roomcoupon") }); $(document).click(function (e) { var input = $(e.target).closest('.block-input').length; var emoji = $(e.target).closest('.block-emoji').length; var plus = $(e.target).closest('.block-plus').length; if (emoji < 1 && input < 1 && plus < 1) { $('.fui-content').removeClass('show-emoji'); $('.block-input .input .btn-emoji').removeClass('active'); $('.fui-content').removeClass('show-plus'); $('#input').blur() } }); $('.layer-coupon .btn-yellow').click(function () { $('.layer-coupon').find('.layer-close').click(); $('.btn-goods').click() }); $('.btn-refresh').click(function () { location.reload() }); $(".roomcoupon").off("click").on("click", function () { var _this = $(this); var roomid = parseInt(_this.attr("data-roomid")); var couponid = parseInt(_this.attr("data-couponid")); var livetime = parseInt(_this.attr("data-livetime")); var disabled = _this.hasClass("disabled") ? false : true; var couponuselimit = _this.find('.subtitle').html() != '' ? _this.find('.subtitle').html() : '无使用条件'; var couponvaluetext = _this.find('.left').find('span').html(); if (disabled) { core.json('live/room/roomcoupon', { roomid: roomid, livetime: livetime, couponid: couponid }, function (ret) { var result = ret.result; if (ret.status < -1) { _this.addClass("disabled").find(".live-mask").text(result.message); $('.layer-gifts').removeClass('in'); $('.layer-mask').fadeIn(200); $('.layer-coupon .coupon-title').text(result.message); $('.layer-coupon .coupon-fail-title').text(''); $('.layer-coupon').addClass('fail').addClass('in'); return } else if (ret.status >= -1 && ret.status <= 0) { FoxUI.toast.show(result.message) } else { $('.msg .content .coupon[data-pushid="' + couponid + '"]').text('优惠券已领取').addClass('drew'); $('.layer-mask').fadeIn(200); $('.layer-gifts').removeClass('in'); $('.layer-coupon .coupon-title').text('优惠券已到账'); var html = ''; if (couponvaluetext.indexOf("减") >= 0) { html += "¥" } var re = /[\u4E00-\u9FA5]/g; couponvaluetext = couponvaluetext.replace(re, ""); html += ' ' + parseFloat(couponvaluetext) + ''; if (couponvaluetext.indexOf("折") >= 0) { html += '折' } $('.layer-coupon .price').html(html); $('.layer-coupon .desc').html(couponuselimit); $('.layer-coupon').removeClass('fail').addClass('in').addClass('roomcoupon') } }) } }) }; modal.initRedpackList = function (arr) { var elm = $('.layer-redpack .redpack-list .inner'), html = ''; elm.empty(); if ($.isArray(arr)) { $.each(arr, function (index, item) { html += '
' + item.nickname + '
' + item.money + '
' }) } elm.html(html) }; modal.initNotice = function () { if ($('.block-notice').length < 1) { return false } modal.initNoticeScroll(); setInterval(function () { modal.initNoticeScroll(true); setTimeout(function () { modal.initNoticeScroll() }, 30000) }, 20000); }; modal.initNoticeScroll = function (hide) { var elm = $('.block-notice'); if (hide) { elm.hide(); clearInterval(modal.notice); return } elm.show(); var left = $(window).width(); modal.notice = setInterval(function () { left -= 1; var width = elm.find('.inner').width(); if (left < 0 - width) { left = $(window).width() } elm.find('.inner').css({left: left + 'px'}, 200) }, 40) }; modal.clickLike = function () { var colors = ['#ffc510', '#ff4a4a', '#ff9141', '#fb7c63', '#05e0e8', '#24ec79', '#50b7ff', '#b9f110', '#59e4b5', '#fe76e9', '#b976fe', '#fea2d0', '#918eff'], cindex = Math.floor(Math.random() * 12); var icons = ['icon-aixin1', 'icon-gouwudai', 'icon-yifuicon122438', 'icon-juzi', 'icon-liwu', 'icon-aixin', 'icon-flower1', 'icon-shuiguo', 'icon-kafei'], iindex = Math.floor(Math.random() * 8); var x = 200, y = 400; var rand = parseInt(Math.random() * (x - y + 1) + y); $('.fui-content').append('
'); $(".ico-like").animate({bottom: "800px", opacity: "0", right: rand,}, 3000, null, function () { $(this).remove() }) }; modal.scrollBottom = function () { var elm = $('.tab-content[data-tab="interaction"]'); var scrollHeight = elm[0].scrollHeight; elm.stop(true).animate({scrollTop: scrollHeight + "px"}, 100) }; modal.tomedia = function (src) { if (typeof src != 'string') { return '' } if (src.indexOf('http://') == 0 || src.indexOf('https://') == 0 || src.indexOf('../addons/ewei_shopv2/') == 0) { return src } else if (src.indexOf('images/') == 0 || src.indexOf('audios/') == 0) { return modal.wsConfig.attachurl + src } }; modal.insertAtCaret = function (elm, textFeildValue) { var textObj = $(elm).get(0); if (document.all && textObj.createTextRange && textObj.caretPos) { var caretPos = textObj.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == '' ? textFeildValue + '' : textFeildValue } else if (textObj.setSelectionRange) { var rangeStart = textObj.selectionStart; var rangeEnd = textObj.selectionEnd; var tempStr1 = textObj.value.substring(0, rangeStart); var tempStr2 = textObj.value.substring(rangeEnd); textObj.value = tempStr1 + textFeildValue + tempStr2; textObj.focus(); var len = textFeildValue.length; textObj.setSelectionRange(rangeStart + len, rangeStart + len); textObj.blur() } else { textObj.value += textFeildValue } $(elm).trigger('change') }; modal.startVideo= function() { modal.myPlayer.play(); //微信内全屏支持 /* document.getElementById('player').style.width = window.screen.width + "px"; document.getElementById('player').style.height = window.screen.height + "px";*/ //判断开始播放视频,移除高斯模糊等待层 var isVideoPlaying = setInterval(function(){ var currentTime = modal.myPlayer.currentTime(); if(currentTime > 0){ $('.vjs-poster').remove(); clearInterval(isVideoPlaying); } },200); //判断视频是否卡住,卡主3s重新load视频 var lastTime = -1, tryTimes = 0; clearInterval(modal.isVideoBreak); modal.isVideoBreak = setInterval(function(){ var currentTime = modal.myPlayer.currentTime(); console.log('currentTime'+currentTime+'lastTime'+lastTime); if(currentTime == lastTime){ //此时视频已卡主3s //设置当前播放时间为超时时间,此时videojs会在play()后把currentTime设置为0 modal.myPlayer.currentTime(currentTime+10000); modal.myPlayer.play(); //尝试6次播放后,如仍未播放成功提示刷新 if(++tryTimes > 6){ FoxUI.toast.show('您的网速有点慢,请在自动刷新之后重新点击观看!'); tryTimes = 0; } }else{ lastTime = currentTime; tryTimes = 0; } },3000) } return modal });