var huawei = huawei || {}; typeof module != "undefined" && (module.exports = huawei); // html标签增加特定class, attribute,限定样式,兼容浏览器用 document.documentElement.className += " ie" + document.documentMode; document.documentElement.setAttribute("data-userAgent", navigator.userAgent); $(document).on("videojs-loaded.setup-video", function () { // return; setTimeout(function () { $(".js_video_player") .filter('[data-play-nopop="1"]') .each(function () { var $t = $(this); $t.addClass("invisible"); var vid = "myvideo-" + generateUUID(); var options = $(this).attr("data-player-id", vid).data("options"); var data = $(this).data(); delete data.options; $.extend(options, data); // if ($t.attr("data-play-nopop") == "1") $t.parent() .find(".player-outer-box") .remove() .end() .prepend( '
' ); window.initPlayer(vid, options, false); }); $(".js_video_player") .not('[data-play-nopop="1"]') .each(function () { var vid = "myvideo-" + generateUUID(); var options = $(this).attr("data-player-id", vid).data("options"); var data = $(this).data(); delete data.options; $.extend(options, data); options.autoplay = false; window.initPlayer(vid, options, true); }); }, 10); }); $(function ($) { huawei.playerLoad(); // huawei.mobilePlayerInit(); }); huawei.playerSetup = function () { // bof (function ($) { var playerInstance = null; $(document).on("click", ".js-close-video", function (e) { var $vbox = $(this).closest(".video-box"); $vbox.find("video").trigger("pause"); setTimeout(function () { $vbox .removeClass("show") .delay(500) .promise() .then(function () { $(this).hide(); }); }, 10); }); $(document).off("vclick", ".js_video_player, .js-play-btn, .btn-play"); $(document) .off("click", ".js_video_player, .js-play-btn, .btn-play") .on("click", ".js_video_player, .js-play-btn, .btn-play", function (e) { if (typeof videojs == "undefined") { if (window.console) console.log("player 还未加载"); return false; } var $t = $(this); var vid = $t.attr("data-player-id"); $("#" + vid) .closest(".video-box") .show() .delay(10) .promise() .then(function () { $(this).addClass("show"); }); setTimeout(function () { videojs(vid).play(); }, 100); return false; }); $(document).on("click", ".js-close-video-popup", function (e) { playerInstance.pause(); $("body").removeClass("video-popup"); $(this).closest(".videojs_player_wrapper").removeClass("active"); }); })(jQuery); // eof }; huawei.playerLoad = function (invokeSetup) { jQuery.loadScript = function (url, options) { // Allow user to set any option except for dataType, cache, and url options = $.extend(options || {}, { dataType: "script", cache: true, url: url, }); /* * Use $.ajax() since it is more flexible than $.getScript * Return the jqXHR object so we can chain callbacks */ return jQuery.ajax(options); }; window["lang"] = document.URL.indexOf("/cn/") >= 0 || $("html[lang=zh]").length ? "cn" : "en"; window["videojsLanguage"] = window["lang"] == "cn" ? "zh-CN" : "en"; window["playerLang"] = {}; window["playerLang"]["en"] = { "Switch-Quality": "Switch quality", "Download-Video": "Download video", }; window["playerLang"]["cn"] = { "Switch-Quality": "选择分辨率", "Download-Video": "下载视频", }; function getVideoJs7() { $( "" ).prependTo("head"); $( '' ).prependTo("head"); return jQuery .loadScript( "https://www.huawei.com/Assets/corp/2020/js/lib/vendor/video.js/video.min.js" ) .then(function (d) {}); } invokeSetup = typeof invokeSetup == "boolean" ? invokeSetup : true; var ismobile = isMobile(); var ie = isIE89(); var videoFn = getVideoJs7; if (typeof videojs != "undefined") { videoFn = function () { var dfd = jQuery.Deferred(); setTimeout(function () { dfd.resolve("ok"); }, 10); return dfd; }; } var something = (function () { var executed = false; return function () { if (!executed) { executed = true; // do something videoFn().done(function (d) { $(document).trigger("videojs-loaded"); if (!invokeSetup) return; huawei.playerSetup(); if (ismobile) { var $m = $(".js_video_player") .filter("[data-play-nopop=1]") .not("[data-mobile-init=0]"); $m.attr("data-player-autostart", "0"); setTimeout(function () { $m.trigger("click"); // $(".js_video_player").filter("[data-player-mobile-init=1]").attr("data-player-autostart", "0").trigger("click"); }, 100); } }); } }; })(); function load_jwplayer_fn() { something(); } load_jwplayer_fn(); }; huawei.mobilePlayerInit = function () { if (!isMobile()) return; window.mobVideoFlag = true; // $(".js_video_player").filter("[data-player-id]").attr("data-player-autostart", "0").trigger("click"); $(".js_video_player").each(function (i, o) { if ( $(this).attr("run_at_pc_module") || $(this).attr("data-mobile-init") == "0" ) { return; } var player_id = "js-player-" + generateUUID(); var player_placeholder = '
'; // $(this).attr("data-player-id", player_id).attr("data-play-nopop", 1) $(this) .attr("href", "javascript:void(0)") .parent() .prepend(player_placeholder); $(this).attr("data-onclick", $(this).attr("onclick")).prop("onclick", null); }); }; window.initPlayer = function (playerid, options, append) { options = options || {}; append = append || false; var $vc = $( '
' ); if(!append) $vc.replaceAll($("#" + playerid)); else $("body").append($vc.addClass("content").append(' ').wrapAll('
').parent().hide()); var player_options = { controls: true, autoplay: true, preload: "metadata", fluid: true, sources: [], aspectRatio: "16:9", muted: false, plugins: {}, language: window["videojsLanguage"], }; options["aspectRatio"] = options["aspectRatio"] || options["aspectratio"] || "16:9"; options["muted"] = options["muted"] || options["mute"] || false; options["loop"] = options["loop"] || options["repeat"] || false; if (videojs.getPlugin && videojs.getPlugin("videoJsResolutionSwitcher")) { var res = window.innerWidth >= 768 ? 720 : "low"; player_options.plugins["videoJsResolutionSwitcher"] = { default: res, // Default resolution [{Number}, 'low', 'high'], dynamicLabel: true, textControl: window["playerLang"][window["lang"]]["Switch-Quality"], }; } if (videojs.getPlugin && videojs.getPlugin("vjsdownload")) { player_options.plugins["vjsdownload"] = { beforeElement: "playbackRateMenuButton", textControl: window["playerLang"][window["lang"]]["Download-Video"], name: "downloadButton", //downloadURL: 'https://insert_source_here.mp4' //optional if you need a different download url than the source }; } $.extend(player_options, options); var player = videojs.getPlayers()[playerid]; if (player) player.dispose(); var player = videojs(playerid, player_options); if (player_options["autoplay"]) setTimeout(function () { player.play(); }, 1000); if (videojs.getComponent("QualitySelector")) { player.controlBar .addChild("QualitySelector", { textControl: "Quality", }) .controlText(window["playerLang"][window["lang"]]["Switch-Quality"]); } if (player.ga) player.ga(); if (player_options.gaEvent) { var flag = false; var evt = function (e) { if (flag) return; flag = true; var gaEvent = new Function("e", player_options.gaEvent); gaEvent.apply(e); }; if (player.one) player.one("play", evt); else player.on("play", evt); } // var hasSend = false; // player.on("play", function (e) { // if (hasSend) return; // hasSend = true; // var url = player.currentSrc(); // try { // utag.link({ // tealium_event: "video_clicked", // video_id: url, // video_name: "", // }); // } catch (e) {} // }); return player; }; function isIE89() { var ie = /(msie ([6-9]|10)|Trident)/i.test(navigator.userAgent); return ie; } function isMobile() { var isMobile = { Android: function () { return navigator.userAgent.match(/Android/i); }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i); }, iOS: function () { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Opera: function () { return navigator.userAgent.match(/Opera Mini/i); }, Windows: function () { return navigator.userAgent.match(/IEMobile/i); }, any: function () { return ( isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows() ); }, }; return isMobile.any(); } function generateUUID() { var d = new Date().getTime(); var d2 = (typeof performance !== "undefined" && performance.now && performance.now() * 1000) || 0; return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = Math.random() * 16; if (d > 0) { r = (d + r) % 16 | 0; d = Math.floor(d / 16); } else { r = (d2 + r) % 16 | 0; d2 = Math.floor(d2 / 16); } return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); }); } // 播放器图标样式 $(document).on("videojs-loaded.style", function () { var style = "\n "; setTimeout(function () { $(style).appendTo("head"); }, 10); }); // 多分辨率插件 $(document).on("videojs-loaded.videojs-resolution-switcher", function () { $("") .appendTo("head"); /*! videojs-resolution-switcher - 2015-7-26 * Copyright (c) 2016 Kasper Moskwiak * Modified by Pierre Kraft * Licensed under the Apache-2.0 license. */ !function(){"use strict";var e=null;e=void 0===window.videojs&&"function"==typeof require?require("video.js"):window.videojs,function(e,t){var l,s={},r={},i={};function o(e,t,l,s){return r={label:l,sources:t},"function"==typeof s?s(e,t,l):(e.src(t.map(function(e){return{src:e.src,type:e.type,res:e.res}})),e)}var n=t.getComponent("MenuItem"),a=t.extend(n,{constructor:function(e,t,l,s){this.onClickListener=l,this.label=s,n.call(this,e,t),this.src=t.src,this.on("click",this.onClick),this.on("touchstart",this.onClick),t.initialySelected&&(this.showAsLabel(),this.selected(!0),this.addClass("vjs-selected"))},showAsLabel:function(){this.label&&(this.label.innerHTML=this.options_.label)},onClick:function(e){this.onClickListener(this);var t=this.player_.currentTime(),l=this.player_.paused(),s=this.player_.playbackRate(),r=this.player_.options_.poster;this.showAsLabel(),this.addClass("vjs-selected");var i=this.player_;setTimeout(function(){i.play()},500),l?this.player_.bigPlayButton.show():(this.player_.bigPlayButton.hide(),r&&this.player_.posterImage.setSrc("")),"function"!=typeof e&&"function"==typeof this.options_.customSourcePicker&&(e=this.options_.customSourcePicker);var n="loadeddata";"Youtube"!==this.player_.techName_&&"none"===this.player_.preload()&&"Flash"!==this.player_.techName_&&(n="timeupdate"),o(this.player_,this.src,this.options_.label,e).one(n,function(){this.player_.currentTime(t),l||(this.player_.playbackRate(s),this.player_.play(),this.player_.posterImage.setSrc(r)),this.player_.trigger("resolutionchange")})}}),c=t.getComponent("MenuButton"),u=t.extend(c,{constructor:function(e,l,s,r){if(this.sources=l.sources,this.label=r,this.label.innerHTML=l.initialySelectedLabel,c.call(this,e,l,s),this.controlText("Quality"),s.dynamicLabel)this.el().appendChild(r);else{var i=document.createElement("span");t.dom.appendContent(i,l.initialySelectedLabel),t.dom.addClass(i,"vjs-resolution-button-staticlabel"),this.el().appendChild(i)}},createItems:function(){var e=[],t=this.sources&&this.sources.label||{},l=function(t){e.map(function(e){e.selected(e===t),e.removeClass("vjs-selected")})};for(var s in t)t.hasOwnProperty(s)&&(e.push(new a(this.player_,{label:s,src:t[s],initialySelected:s===this.options_.initialySelectedLabel,customSourcePicker:this.options_.customSourcePicker},l,this.label)),i[s]=e[e.length-1]);return e}});l=function(e){var l=t.mergeOptions(s,e),n=this,a=document.createElement("span"),c={};function h(e,t){return e.res&&t.res?+t.res-+e.res:0}function d(e){var t={label:{},res:{},type:{}};return e.map(function(e){p(t,"label",e),p(t,"res",e),p(t,"type",e),y(t,"label",e),y(t,"res",e),y(t,"type",e)}),t}function p(e,t,l){null==e[t][l[t]]&&(e[t][l[t]]=[])}function y(e,t,l){e[t][l[t]].push(l)}t.dom.addClass(a,"vjs-resolution-button-label"),this.el().appendChild(a),n.updateSrc=function(e){if(!e)return n.src();n.controlBar.resolutionSwitcher&&(n.controlBar.resolutionSwitcher.dispose(),delete n.controlBar.resolutionSwitcher),e=e.sort(h);var s=function(e,t){var s=l.default,r="";"high"===s?(s=t[0].res,r=t[0].label):"low"!==s&&null!=s&&e.res[s]?e.res[s]&&(r=e.res[s][0].label):(s=t[t.length-1].res,r=t[t.length-1].label);return{res:s,label:r,sources:e.res[s]}}(c=d(e),e),r=new u(n,{sources:c,initialySelectedLabel:s.label,initialySelectedRes:s.res,customSourcePicker:l.customSourcePicker},l,a);return t.dom.addClass(r.el(),"vjs-resolution-button"),n.controlBar.resolutionSwitcher=n.controlBar.el_.insertBefore(r.el_,n.controlBar.getChild("fullscreenToggle").el_),n.controlBar.resolutionSwitcher.dispose=function(){this.parentNode.removeChild(this)},o(n,s.sources,s.label)},n.currentResolution=function(e,t){return console.log("currentResolution: ",e),null==e?r:(console.log("currentResolution: ",i[e]),null!=i[e]&&i[e].onClick(t),n)},n.getGroupedSrc=function(){return c},n.ready(function(){n.options_.sources.length>1&&n.updateSrc(n.options_.sources),"Youtube"===n.techName_&&function(e){e.tech_.ytPlayer.setPlaybackQuality("default"),e.tech_.ytPlayer.addEventListener("onPlaybackQualityChange",function(){e.trigger("resolutionchange")}),e.one("play",function(){var t=e.tech_.ytPlayer.getAvailableQualityLevels(),s={highres:{res:1080,label:"1080",yt:"highres"},hd1080:{res:1080,label:"1080",yt:"hd1080"},hd720:{res:720,label:"720",yt:"hd720"},large:{res:480,label:"480",yt:"large"},medium:{res:360,label:"360",yt:"medium"},small:{res:240,label:"240",yt:"small"},tiny:{res:144,label:"144",yt:"tiny"},auto:{res:0,label:"auto",yt:"default"}},r=[];t.map(function(t){r.push({src:e.src().src,type:e.src().type,label:s[t].label,res:s[t].res,_yt:s[t].yt})});var i="auto",o=0,n=((c=d(r)).label.auto,new u(e,{sources:c,initialySelectedLabel:i,initialySelectedRes:o,customSourcePicker:function(t,l,s){return e.tech_.ytPlayer.setPlaybackQuality(l[0]._yt),e}},l,a));n.el().classList.add("vjs-resolution-button"),e.controlBar.resolutionSwitcher=e.controlBar.addChild(n)})}(n)})},(t.registerPlugin||t.plugin)("videoJsResolutionSwitcher",l)}(window,e)}(); }); // ga统计插件 $(document).on("videojs-loaded.videojs-ga", function () { /* * videojs-ga - v0.4.2 - 2015-02-06 * Copyright (c) 2015 Michael Bensoussan * Licensed MIT */ (function() { var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; videojs.registerPlugin=videojs.registerPlugin||videojs.plugin; videojs.registerPlugin('ga', function(options) { var dataSetupOptions, defaultsEventsToTrack, end, error, eventCategory, eventLabel, eventsToTrack, fullscreen, loaded, parsedOptions, pause, percentsAlreadyTracked, percentsPlayedInterval, play, resize, seekEnd, seekStart, seeking, sendbeacon, timeupdate, volumeChange; if (options == null) { options = {}; } dataSetupOptions = {}; if (this.options()["data-setup"]) { parsedOptions = JSON.parse(this.options()["data-setup"]); if (parsedOptions.ga) { dataSetupOptions = parsedOptions.ga; } } defaultsEventsToTrack = ['loaded', 'percentsPlayed', 'start', 'end', 'seek', 'play', 'pause', 'resize', 'volumeChange', 'error', 'fullscreen', 'downloadvideo', 'resolutionchange']; eventsToTrack = options.eventsToTrack || dataSetupOptions.eventsToTrack || defaultsEventsToTrack; percentsPlayedInterval = options.percentsPlayedInterval || dataSetupOptions.percentsPlayedInterval || 10; eventCategory = options.eventCategory || dataSetupOptions.eventCategory || 'Video'; eventLabel = options.eventLabel || dataSetupOptions.eventLabel; options.debug = options.debug || false; percentsAlreadyTracked = []; seekStart = seekEnd = 0; seeking = false; loaded = function() { if (!eventLabel) { eventLabel = this.currentSrc().split("/").slice(-1)[0].replace(/\.(\w{3,4})(\?.*)?$/i, ''); } if (__indexOf.call(eventsToTrack, "loadedmetadata") >= 0) { sendbeacon('loadedmetadata', true); } }; timeupdate = function() { var currentTime, duration, percent, percentPlayed, _i; currentTime = Math.round(this.currentTime()); duration = Math.round(this.duration()); percentPlayed = Math.round(currentTime / duration * 100); for (percent = _i = 0; _i <= 99; percent = _i += percentsPlayedInterval) { if (percentPlayed >= percent && __indexOf.call(percentsAlreadyTracked, percent) < 0) { if (__indexOf.call(eventsToTrack, "start") >= 0 && percent === 0 && percentPlayed > 0) { sendbeacon('start', false); } else if (__indexOf.call(eventsToTrack, "percentsPlayed") >= 0 && percentPlayed !== 0) { sendbeacon('percent played', false, percent); // utag ga4 // utagLink({ // 'tealium_event' : 'video_progress', // 'video_url' : this.currentSrc(), // 'video_percent': percent // }); } if (percentPlayed > 0) { percentsAlreadyTracked.push(percent); } } } if (__indexOf.call(eventsToTrack, "seek") >= 0) { seekStart = seekEnd; seekEnd = currentTime; if (Math.abs(seekStart - seekEnd) > 1) { seeking = true; sendbeacon('seek start', false, seekStart); sendbeacon('seek end', false, seekEnd); } } }; var isStart = true; end = function() { sendbeacon('end', false); isStart = true; // utagLink({ // 'tealium_event' : 'video_complete', // 'video_url' : this.currentSrc() // }); }; play = function() { var currentTime; currentTime = Math.round(this.currentTime()); sendbeacon('play', false, currentTime); seeking = false; if(isStart) { isStart = false; // utagLink({ // 'tealium_event' : 'video_start', // 'video_url' : this.currentSrc() // }); } }; pause = function() { var currentTime, duration; currentTime = Math.round(this.currentTime()); duration = Math.round(this.duration()); if (currentTime !== duration && !seeking) { sendbeacon('pause', false, currentTime); } }; volumeChange = function() { var volume; volume = this.muted() === true ? 0 : this.volume(); sendbeacon('volume change', false, volume); }; resize = function() { // sendbeacon('resize - ' + this.width() + "*" + this.height(), true); }; error = function() { var currentTime; currentTime = Math.round(this.currentTime()); sendbeacon('error', true, currentTime); }; fullscreen = function() { var currentTime; currentTime = Math.round(this.currentTime()); if ((typeof this.isFullscreen === "function" ? this.isFullscreen() : void 0) || (typeof this.isFullScreen === "function" ? this.isFullScreen() : void 0)) { sendbeacon('enter fullscreen', false, currentTime); } else { sendbeacon('exit fullscreen', false, currentTime); } }; var downloadvideo = function() { var currentTime; currentTime = Math.round(this.currentTime()); sendbeacon('downloadvideo', false, currentTime); }; var _this=this; sendbeacon = function(action, nonInteraction, value) { eventLabel=_this.currentSrc().split("/").slice(-1)[0]+"|"+location.pathname+location.search; if (window.ga) { ga('send', 'event', { 'eventCategory': eventCategory, 'eventAction': action, 'eventLabel': eventLabel, 'eventValue': value, 'nonInteraction': nonInteraction }); } else if (window._gaq) { _gaq.push(['_trackEvent', eventCategory, action, eventLabel, value, nonInteraction]); } else if (options.debug) { console.log("Google Analytics not detected"); } }; // function utagLink(options){ // utag.link(options); // } this.ready(function() { this.on("loadedmetadata", loaded); this.on("timeupdate", timeupdate); if (__indexOf.call(eventsToTrack, "resolutionchange") >= 0) { this.on("resolutionchange", function () { var currentTime = Math.round(this.currentTime()); sendbeacon('resolutionchange', false, currentTime); }); } if (__indexOf.call(eventsToTrack, "downloadvideo") >= 0) { this.on("downloadvideo", downloadvideo); } if (__indexOf.call(eventsToTrack, "end") >= 0) { this.on("ended", end); } if (__indexOf.call(eventsToTrack, "play") >= 0) { this.on("play", play); } if (__indexOf.call(eventsToTrack, "pause") >= 0) { this.on("pause", pause); } if (__indexOf.call(eventsToTrack, "volumeChange") >= 0) { this.on("volumechange", volumeChange); } if (__indexOf.call(eventsToTrack, "resize") >= 0) { this.on("resize", resize); } if (__indexOf.call(eventsToTrack, "error") >= 0) { this.on("error", error); } if (__indexOf.call(eventsToTrack, "fullscreen") >= 0) { return this.on("fullscreenchange", fullscreen); } }); return { 'sendbeacon': sendbeacon }; }); }).call(this); }); // 下载插件 $(document).on("videojs-loaded.videojs-download", function () { /** * videojs-vjsdownload * @version 1.0.4 * @copyright 2019 7Ds7 * @license Apache-2.0 */ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.videojsVjsdownload=e()}}(function(){return function e(t,o,n){function r(l,u){if(!o[l]){if(!t[l]){var f="function"==typeof require&&require;if(!u&&f)return f(l,!0);if(i)return i(l,!0);var a=new Error("Cannot find module '"+l+"'");throw a.code="MODULE_NOT_FOUND",a}var d=o[l]={exports:{}};t[l][0].call(d.exports,function(e){var o=t[l][1][e];return r(o||e)},d,d.exports,e,t,o,n)}return o[l].exports}for(var i="function"==typeof require&&require,l=0;l