On MeTV Now
All in the Family
Up Next:
9:00PM All in the Family
Up Next:
'); $videoEl.append('' + '' + ''); setTimeout(function(){ $('.mute-overlay').on('touchstart click', function(e){ if(e.handled === false) return; e.stopPropagation(); e.preventDefault(); e.handled = true; player.muted(false); //console.log("volumee " + WVM.activePlayer.volume()); $(this).hide(); $(this).css('display', 'none'); var currentTime = player.currentTime(); if(currentTime < 3){ player.currentTime(0); } var adsManager = player.ima.getAdsManager(); adsManager.setVolume(player.volume()); }); $('.video-close-floating').on('click', function(){ WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); player.pause(); WVM.NO_FLOAT_COOKIE(); var adsManager = player.ima.getAdsManager(); if(adsManager){ adsManager.pause(); } }); if(hideClose){ setTimeout(function(){ $('.video-close-floating').css('display', 'none'); $('.video-close-floating').remove(); }, 500); } }, 500); } else{ //wait 500 sec call again setTimeout(function(){ WVM.addMuteButton(videoId, player, hideClose); }, 500); } }; WVM.addFloatingAbility = function(videoId, player){ var deviceName = 'desktop'; if($('#media-container-' + videoId).length > 0){ if(deviceName == 'desktop'){ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top; }else{ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top - $('.next-dropdown-accordion').height(); } if(deviceName == 'desktop'){ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); }else{ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); } WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); //console.log("container height: " + WVM.CONTAINER_HEIGHT); $(window).on( "resize", function() { if(deviceName == 'desktop'){ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top; }else{ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top - $('.next-dropdown-accordion').height(); } if(deviceName == 'desktop'){ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); }else{ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); } WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); console.log("container height: " + WVM.CONTAINER_HEIGHT); }); //console.log("VIDEOTOP: " + WVM.VIDEO_TOP); //console.log("VIDEOHEIGHT: " + WVM.VIDEO_HEIGHT); $(window).on( "scroll", function() { if(!WVM.IS_FLOATING){ if(deviceName == 'desktop'){ WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); }else{ WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId + " .hlsvideo-wrapper").height() + $('#media-container-' + videoId + " .now-playing-container").height(); } } //var top = $('#media-container-' + videoId).offset().top; var offset = WVM.VIDEO_TOP + (WVM.VIDEO_HEIGHT / 2); var offsetBack = WVM.VIDEO_TOP; var changed = false; //console.log("VIDEOTOP: " + WVM.VIDEO_TOP); //console.log("VIDEOHEIGHT: " + WVM.VIDEO_HEIGHT); //console.log("scrolltop " + $(window).scrollTop()); //only float if playing var isPlaying = WVM['player_state' + videoId]['IS_PLAYING'] || WVM['player_state' + videoId]['AD_IS_PLAYING']; if(isPlaying){ $('.vjs-loading-spinner').hide(); } var offsetFloatAd = 99999999; if(deviceName == 'desktop' && $('#float_anchor').length > 0){ offsetFloatAd = $('#float_anchor').offset().top - WVM.VIDEO_HEIGHT; //console.log("float anchor offset top " + offsetFloatAd); } if($(window).scrollTop() > offset && isPlaying && !WVM['player_state' + videoId]['CANCEL_FLOATING']){ $('#media-placeholder-' + videoId).height(WVM.CONTAINER_HEIGHT); $('#media-placeholder-' + videoId).css('display', 'block'); if(!WVM.IS_FLOATING){ changed = true; window.dispatchEvent(WVM.FloatEventStart); } WVM.IS_FLOATING = true; $('#media-container-' + videoId).addClass('floating-video'); //set right var sWidth = window.innerWidth || document.documentElement.clientWidth; var sHeight = window.innerHeight || document.documentElement.clientHeight; if(sWidth > 700 && WADS.IS_STICKING){ $('#media-container-' + videoId).addClass('desktop-ad-is-sticky'); }else if(!WADS.IS_STICKING){ $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); } if(sWidth <= 700 && WADS.IS_STICKING){ $('#media-container-' + videoId).addClass('mobile-ad-is-sticky'); }else if(sWidth <= 700 && !WADS.IS_STICKING){ $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); } if(deviceName == 'desktop' || sWidth > 900){ var leftPos2 = $('aside').get(0).getBoundingClientRect().left; var leftPos = $('aside').offset().left - 50; $('#media-container-' + videoId).css('left', leftPos + "px"); var newWidth = Math.floor(sWidth / 3.5); $('#media-container-' + videoId).css('width', newWidth + "px"); } else{ $('#media-container-' + videoId).css('width', "100% !important"); if(!WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId + ' .now-playing-container').css('display', 'block'); $('#media-container-' + videoId + ' .next-dropdown-accordion').css('display', 'block'); } } if(sWidth < 900 && sWidth > 500 && WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId).addClass('floating-video'); $('#media-container-' + videoId).addClass('mobile-container'); $('#media-container-' + videoId).addClass('promo-playlist'); } //floating-video $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); setTimeout(function(){ var hWrapper = $('.floating-video .hlsvideo-wrapper').height(); var npWidth = $('.floating-video .now-playing-container').height(); var ndWidth = $('.floating-video .next-dropdown-header').height() + 20; var scrollerHeight = sHeight - (hWrapper + npWidth + ndWidth); scrollerHeight = 180; //scrollerHeight = parseInt(scrollerHeight * 0.5); if(WVM.device_name == 'desktop'){ $('#media-container-' + videoId + " " + " .mobile-list-videos").height(scrollerHeight); } }, 100); } if($(window).scrollTop() < offsetBack || $(window).scrollTop() > offsetFloatAd){ if(WVM.IS_FLOATING){ changed = true; window.dispatchEvent(WVM.FloatEventEnd); } WVM.IS_FLOATING = false; $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); $('#media-container-' + videoId + ' .now-playing-container').css('display', 'block'); if(WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId + ' .now-playing-container').css('display', 'none'); $('#media-container-' + videoId + ' .next-dropdown-accordion').css('display', 'none'); } } if($('#next-dropdown-accordion-button-' + videoId).find('i').hasClass('fa-chevron-up')){ if(deviceName == "desktop" && !$('#media-container-' + videoId).hasClass('floating-video')){ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').show(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); //console.log("showing desktop"); if(!WVM.player_state208258['CAROUSEL_INIT']){ WVM.setupCarousel(videoId); } }else{ if(changed){ //default closed for mobile/floating player $('#next-dropdown-accordion-button-' + videoId).find('i').removeClass('fa-chevron-up'); $('#next-dropdown-accordion-button-' + videoId).find('i').addClass('fa-chevron-down'); $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); var currVideoId = WVM['player_state' + videoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); var myTitle = WVM.getPlaylistData(videoId, currVideoId, 'noprefixtitle'); $('#video-slider-nexttitle' + videoId).css('display', 'inline'); $('#video-slider-nexttitle' + videoId).html(myTitle); }else{ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').show(); } } }else{ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); } } ); $('#media-container-' + videoId + ' .video-close').on('click',function(){ //set back to paused and stop floating WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); WVM.NO_FLOAT_COOKIE(); player.pause(); player.ima.getAdsManager().pause(); }); } }; WVM.setupCarousel = function(fullVideoId, player){ // initialize Masonry after all images have loaded //alert("setting up carousel"); console.log("setting up carousel on desktop"); $('#page-carousel-' + fullVideoId).css('display', 'block'); WVM['player_state' + fullVideoId]['CAROUSEL_INIT'] = true; if($('#page-carousel-' + fullVideoId).length > 0){ var container = document.querySelector('#page-carousel-' + fullVideoId); imagesLoaded( container, function() { var screenWidth = window.innerWidth || document.documentElement.clientWidth; if(screenWidth > 850){ //alert("setting up carousel3"); WVM.IS_DESKTOP = true; $('#page-carousel-' + fullVideoId + ' .page-carousel-lg-slides').css('display', 'block'); WVM['player_settings' + fullVideoId].slider = $('#page-carousel-' + fullVideoId).owlCarousel({ loop: false, center: false, nav: false, dots: false, autoplay: false, autoplayHoverPause: true, margin: 25, responsiveClass: true, animateOut: 'slideOutDown', animateIn: 'flipInX', navText : ["",""], responsive:{ 0:{ items:3 } } }); }else{ WVM.IS_DESKTOP = false; $('.page-carousel-wrapper').css('display', 'block'); } }); } }; WVM.setupToggleButton = function(fullVideoId, player){ if($('.nextplay-switch-' + fullVideoId).length > 0){ new DG.OnOffSwitchAuto({ cls:'.nextplay-switch-' + fullVideoId, height: 24, trackColorOn:'#F9F9F9', trackColorOff:'#222', textColorOn: '#222', textColorOff: '#222', textOn:'On', textOff:'Off', listener:function(name, checked){ var theVal = 1; if(!checked){ theVal = 0; } $.ajax({ url: '/ajax/update_autoplay_video/', data: { autoplay_on: theVal }, type: 'POST', dataType: 'json', success: function(data) { WVM['player_settings' + fullVideoId]['autoplay'] = checked; }, error : function(){ console.log("Error loading video"); } }); } }); } }; WVM.setupAccordionButton = function(fullVideoId){ var deviceName = 'desktop'; $('#next-dropdown-accordion-button-' + fullVideoId).on('click', function(){ if($(this).find('i').hasClass('fa-chevron-up')){ //hide $(this).find('i').removeClass('fa-chevron-up'); $(this).find('i').addClass('fa-chevron-down'); if(deviceName == "desktop" && !$('#media-container-' + fullVideoId).hasClass('floating-video')){ $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').slideUp(); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').hide(); }else{ $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').slideUp(); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').hide(); } var currVideoId = WVM['player_state' + fullVideoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); //playerId, mediaId, fieldName var myTitle = WVM.getPlaylistData(fullVideoId, nextVideoId, 'noprefixtitle'); //alert("Getting title " + myTitle); $('#video-slider-nexttitle' + fullVideoId).css('display', 'inline'); $('#video-slider-nexttitle' + fullVideoId).html(myTitle); }else{ //expand $(this).find('i').addClass('fa-chevron-up'); $(this).find('i').removeClass('fa-chevron-down'); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').css('display', 'block'); if(deviceName == "desktop" && !$('#media-container-' + fullVideoId).hasClass('floating-video')){ $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').css('display', 'block'); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').slideDown(); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').hide(); if(!WVM.player_state208258['CAROUSEL_INIT']){ WVM.setupCarousel(fullVideoId); } }else{ $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').slideDown(); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').hide(); if(!$('#media-container-' + fullVideoId).hasClass('floating-video')){ if(!WVM.player_state208258['CAROUSEL_INIT']){ WVM.setupCarousel(fullVideoId); } } } $('#video-slider-nexttitle' + fullVideoId).css('display', 'none'); } }); var currVideoId = WVM['player_state' + fullVideoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } //console.log("current Video " + currVideoId); var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); var myTitle = WVM.getPlaylistData(fullVideoId, nextVideoId, 'noprefixtitle'); //console.log("setting title " + myTitle); $('#video-slider-nexttitle' + fullVideoId).css('display', 'inline'); $('#video-slider-nexttitle' + fullVideoId).html(myTitle); }; WVM.sendbeacon = function(action, nonInteraction, value, eventLabel) { if(WCS.ONLY_CONTENT || WEBVIEW.is_webview){ WEBVIEW.log_stats("video-" + action, value, WCS.THREAD_URL); var eventCategory = 'app_video'; if (window.gtag) { gtag('event', action, { 'event_category': eventCategory, 'event_label': eventLabel, 'value': value, 'non_interaction': nonInteraction }); } }else{ console.log('test'); var eventCategory = 'video'; if (window.gtag) { gtag('event', action, { 'event_category': eventCategory, 'event_label': eventLabel, 'value': value, 'non_interaction': nonInteraction }); } } }; WVM.getNextPlaylistIndex = function(mediaId, returnArrayIndex){ var currId = null; if(mediaId == null){ return null; } var found = false; for(var x =0; x < WVM.playlist_ids.length; x++){ var myMediaId = WVM.playlist_ids[x]; if(myMediaId == mediaId){ found = true; currId = myMediaId; break; } } var nextId = x + 1; if(nextId < WVM.playlist_ids.length && currId !== null){ if(!returnArrayIndex){ return WVM.playlist_ids[nextId]; }else{ return nextId; } } return null; }; WVM.getPlaylistArrayId = function(mediaId){ for(var x =0; x < WVM.playlist_ids.length; x++){ var myMediaId = WVM.playlist_ids[x]; if(myMediaId == mediaId){ return x; } } return null; }; //unimportant stuff like tracking... don't put anything platform specific here WVM.finishPlayer = function(player, playerState, playerSettings){ var percentsPlayedInterval = 25; //player.off('ready'); player.on('ready', function(){ playerState.PLAYER_READY = true; }); //player.off(['waiting', 'pause']); player.on(['waiting', 'pause'], function() { playerState.IS_PLAYING = false; $('.vjs-loading-spinner').removeClass('badspinner'); }); //player.off('playing'); player.on('playing', function() { console.log('playing'); }); player.on('loadedmetadata', function(){ if(playerState.PLAYER_META){ return; } playerState.PLAYER_META = true; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("loadedmetadata", true, currId, playerState.VIDEO_TITLE); }else{ WVM.sendbeacon("promoloadedmetadata", true, currId, playerState.VIDEO_TITLE); } }); //player.off('adstart'); player.on('adstart', function(){ console.log("starting ads"); WVM.lastAdRequest = new Date().getTime() / 1000; playerState.AD_IS_PLAYING = true; playerState.PLAYED_AD = true; var currId = playerState.VIDEO_ID if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("adstart", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promoadstart", true, currId, playerState.VIDEO_TITLE); } }); //player.off('adend'); player.on('adend', function(){ var playPromise = null; console.log("ad end"); playerState.AD_IS_PLAYING = false; setTimeout(function(){ if(!playerState.IS_PLAYING || player.paused()){ } }, 500); WVM.lastAdRequest = new Date().getTime() / 1000; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("adend", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promoadend", true, currId, playerState.VIDEO_TITLE); } }); //player.off('timeupdate'); player.on('timeupdate', function(){ playerState.IS_PLAYING = true; var fullDuration = this.duration() * 1000; var fullCurrent = this.currentTime() * 1000; var rand = parseInt(Math.random() * 100); //console.log("timeupdate " + fullCurrent + " out of " + fullDuration); if(rand > 20){ if(fullDuration > 1 && ((fullDuration - fullCurrent) > 1) && !$('.vjs-loading-spinner').hasClass('badspinner')){ console.log("hiding spinner"); $('.vjs-loading-spinner').addClass('badspinner'); } } var duration_time = Math.floor(this.duration()); //this is a hack because the end video event is not firing... var current_time = Math.floor(this.currentTime()); if ( current_time > 0 && ( fullCurrent >= (fullDuration - 10) )){ var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } var newMediaId = WVM.getNextPlaylistIndex(currId); //if(playerSettings.autoplay_next && newMediaId){ if(newMediaId){ if('desktop' == "iphone" && playerState.AD_ERROR){ console.log("skipped timeupdate end"); }else{ WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); } } } if(!playerState.START_SENT){ if(!playerState.PROMO_PLAYER){ WVM.sendbeacon('start', true, currId, playerState.VIDEO_TITLE); }else{ WVM.sendbeacon('promostart', true, currId, playerState.VIDEO_TITLE); } playerState.START_SENT = true; } 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(playerState['PERCENTS_TRACKED'], percent) < 0) { if (percentPlayed !== 0) { if(!playerState.PROMO_PLAYER){ WVM.sendbeacon('percent-' + percent, true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon('promopercent-' + percent, true, currId, playerState.VIDEO_TITLE); } } if (percentPlayed > 0) { playerState['PERCENTS_TRACKED'].push(percent); } } } }); //player.off('ended'); player.on('ended', function(){ console.log("ended"); playerState.IS_PLAYING = false; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("complete", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promocomplete", true, currId, playerState.VIDEO_TITLE); } console.log("current id " + currId); console.log("playlist ids"); console.log(WVM.playlist_ids); var newMediaId = WVM.getNextPlaylistIndex(currId); //if(playerSettings.autoplay_next && newMediaId){ if(newMediaId){ WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); }else{ var videoId = playerState.ORIGINAL_ID; WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); console.log("Playlist complete (no more videos)"); } }); //player.off('adserror'); player.on('adserror', function(e){ //$('#ima-ad-container').remove(); WVM.lastAdRequest = new Date().getTime() / 1000; console.log(e); console.log("ads error"); var errMessage = e['data']['AdError']['l']; playerState.AD_IS_PLAYING = false; playerState.IS_PLAYING = false; // && errMessage == 'The VAST response document is empty.' if(!playerState.AD_ERROR){ var dTime = new Date().getTime(); WVM.firstPrerollTagUrl = WVM.getFirstPrerollUrl(); //console.log("not calling backup ad tag url: " + WVM.adTagUrl); /* WVM.activePlayer.ima.changeAdTag(WVM.adTagUrl + "?" + dTime); WVM.activePlayer.ima.requestAds(); //reload src WVM.activePlayer.src({ src: masterSrc, type: 'video/mp4' }); //firefox *really* hates this load event WVM.activePlayer.load(); */ } playerState.AD_ERROR = true; }); //player.off('error'); player.on('error', function(event) { if (player.error().code === 4) { player.error(null); // clear out the old error player.options().sources.shift(); // drop the highest precedence source console.log("now doing src"); console.log(player.options().sources[0]); player.src(player.options().sources[0]); // retry return; } }); //player.off('volumechange'); player.on('volumechange', function(event) { console.log(event); var theHeight = $('#media-container-' + playerState.ORIGINAL_ID + ' .vjs-volume-level').css('height'); var cssVolume = 0; if(theHeight){ cssVolume = parseInt(theHeight.replace('%', '')); } var theVolume = player.volume(); if(theVolume > 0.0 || cssVolume > 0){ $('#media-container-' + playerState.ORIGINAL_ID + ' .mute-overlay').css('display', 'none'); }else{ $('#media-container-' + playerState.ORIGINAL_ID + ' .mute-overlay').css('display', 'block'); } }); //WVM.reinitRawEvents(playerState.ORIGINAL_ID); //setInterval(function(){ // WVM.reinitRawEvents(playerState.ORIGINAL_ID); //}, 2000); WVM.allPlayers.push(player); } if(!WVM.rawCompleteEvent){ WVM.rawCompleteEvent = function(e){ var playerState = WVM['player_state208258']; }; } if(!WVM.rawTimeupdateEvent){ WVM.rawTimeupdateEvent = function(e){ var playerState = WVM['player_state208258']; var rawVideoElem = document.getElementById('html5-video-' + playerState['ORIGINAL_ID'] + '_html5_api'); var fullCurrent = rawVideoElem.currentTime * 1000; var fullDuration = rawVideoElem.duration * 1000; var current_time = Math.floor(rawVideoElem.currentTime); console.log("raw timeupdate: " + fullCurrent + " out of " + fullDuration); if ( current_time > 0 && ( fullCurrent >= (fullDuration - 50) )){ var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } var newMediaId = WVM.getNextPlaylistIndex(currId); if(newMediaId){ console.log("loading new video from rawtimeupdate"); WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); } } if(!$('.vjs-loading-spinner').hasClass('badspinner')){ $('.vjs-loading-spinner').addClass('badspinner') } }; } WVM.reinitRawEvents = function(playerId){ var playerState = WVM['player_state' + playerId]; var rawVideoElem = document.getElementById('html5-video-' + WVM['player_state' + playerId]['ORIGINAL_ID'] + '_html5_api'); //COMPLETE EENT if( WVM['player_state' + playerId].COMPLETE_EVENT){ rawVideoElem.removeEventListener('ended', WVM.rawCompleteEvent, false); } rawVideoElem.addEventListener('ended', WVM.rawCompleteEvent, false); //TIME UPDATE EVENT if( WVM['player_state' + playerId].TIMEUPDATE_EVENT){ rawVideoElem.removeEventListener('ended', WVM.rawTimeupdateEvent, false); } rawVideoElem.addEventListener('ended', WVM.rawTimeupdateEvent, false); WVM['player_state' + playerId].COMPLETE_EVENT = true; WVM['player_state' + playerId].TIMEUPDATE_EVENT = true; };
I'm an expert in web development and JavaScript, with a deep understanding of front-end technologies. My experience includes working on complex web applications and ensuring smooth user experiences. Let me break down the concepts used in the provided code:
-
JavaScript Events:
- The code uses various JavaScript events to handle different interactions in a web page, such as 'click,' 'touchstart,' 'resize,' and 'scroll.'
-
DOM Manipulation:
- The code manipulates the Document Object Model (DOM) to dynamically change the styles, properties, and behavior of HTML elements. For example, it adjusts the width and display of certain elements based on window dimensions and scrolling.
-
Responsive Design:
- The code demonstrates responsiveness by checking the device type ('desktop') and adjusting the layout accordingly. It sets different styles and behaviors for desktop and mobile views.
-
CSS Styling:
- The code applies CSS styles dynamically to create a floating video player. It adjusts the width, left position, and visibility of elements based on different conditions.
-
Asynchronous Operations:
- Asynchronous operations are handled using
setTimeout
to delay the execution of certain functions. This is common in scenarios where timing is crucial, such as waiting for elements to load.
- Asynchronous operations are handled using
-
Event Handling:
- The code includes event listeners to handle events like video playback, ad start and end, and user interactions such as closing the video player.
-
AJAX Requests:
- The code makes an AJAX request using
$.ajax()
to update autoplay settings on the server, indicating whether autoplay is turned on or off.
- The code makes an AJAX request using
-
Video Player Integration:
- The code interacts with a video player, making use of the Video.js library. It manages events related to video playback, ads, and video completion.
-
Dynamic Element Creation:
- Elements like buttons and overlays are dynamically created and appended to the DOM based on certain conditions, enhancing the user interface.
-
Conditional Logic:
- Conditional statements and logic are used to determine the device type, handle different scenarios, and make decisions about displaying or hiding elements.
-
Debugging Output:
- Various
console.log()
statements are used for debugging purposes, providing insights into the flow of the code and the values of variables at different points.
- Various
In summary, the provided code is a comprehensive implementation of a floating video player with responsive design, event handling, and dynamic updates to enhance the user experience. The expertise is demonstrated through the use of advanced web development concepts and libraries.