Path: blob/master/phs/tiktok/vendor/animsition/js/animsition.js
996 views
/*!1* animsition v4.0.22* A simple and easy jQuery plugin for CSS animated page transitions.3* http://blivesta.github.io/animsition4* License : MIT5* Author : blivesta (http://blivesta.com/)6*/7;(function (factory) {8'use strict';9if (typeof define === 'function' && define.amd) {10define(['jquery'], factory);11} else if (typeof exports === 'object') {12module.exports = factory(require('jquery'));13} else {14factory(jQuery);15}16}(function ($) {17'use strict';18var namespace = 'animsition';19var __ = {20init: function(options){21options = $.extend({22inClass : 'fade-in',23outClass : 'fade-out',24inDuration : 1500,25outDuration : 800,26linkElement : '.animsition-link',27// e.g. linkElement : 'a:not([target="_blank"]):not([href^="#"])'28loading : true,29loadingParentElement : 'body', //animsition wrapper element30loadingClass : 'animsition-loading',31loadingInner : '', // e.g '<img src="loading.svg" />'32timeout : false,33timeoutCountdown : 5000,34onLoadEvent : true,35browser : [ 'animation-duration', '-webkit-animation-duration'],36// "browser" option allows you to disable the "animsition" in case the css property in the array is not supported by your browser.37// The default setting is to disable the "animsition" in a browser that does not support "animation-duration".38overlay : false,39overlayClass : 'animsition-overlay-slide',40overlayParentElement : 'body',41transition : function(url){ window.location.href = url; }42}, options);4344__.settings = {45timer: false,46data: {47inClass: 'animsition-in-class',48inDuration: 'animsition-in-duration',49outClass: 'animsition-out-class',50outDuration: 'animsition-out-duration',51overlay: 'animsition-overlay'52},53events: {54inStart: 'animsition.inStart',55inEnd: 'animsition.inEnd',56outStart: 'animsition.outStart',57outEnd: 'animsition.outEnd'58}59};6061// Remove the "Animsition" in a browser62// that does not support the "animaition-duration".63var support = __.supportCheck.call(this, options);6465if(!support && options.browser.length > 0){66if(!support || !this.length){67// If do not have a console object to object window68if (!('console' in window)) {69window.console = {};70window.console.log = function(str){ return str; };71}72if(!this.length) console.log('Animsition: Element does not exist on page.');73if(!support) console.log('Animsition: Does not support this browser.');74return __.destroy.call(this);75}76}7778var overlayMode = __.optionCheck.call(this, options);7980if (overlayMode && $('.' + options.overlayClass).length <= 0) {81__.addOverlay.call(this, options);82}8384if (options.loading && $('.' + options.loadingClass).length <= 0) {85__.addLoading.call(this, options);86}8788return this.each(function(){89var _this = this;90var $this = $(this);91var $window = $(window);92var $document = $(document);93var data = $this.data(namespace);9495if (!data) {96options = $.extend({}, options);9798$this.data(namespace, { options: options });99100if(options.timeout) __.addTimer.call(_this);101102if(options.onLoadEvent) {103$window.on('load.' + namespace, function() {104if(__.settings.timer) clearTimeout(__.settings.timer);105__.in.call(_this);106});107}108109$window.on('pageshow.' + namespace, function(event) {110if(event.originalEvent.persisted) __.in.call(_this);111});112113// Firefox back button issue #4114$window.on('unload.' + namespace, function() { });115116$document.on('click.' + namespace, options.linkElement, function(event) {117event.preventDefault();118var $self = $(this);119var url = $self.attr('href');120121// middle mouse button issue #24122// if(middle mouse button || command key || shift key || win control key)123if (event.which === 2 || event.metaKey || event.shiftKey || navigator.platform.toUpperCase().indexOf('WIN') !== -1 && event.ctrlKey) {124window.open(url, '_blank');125} else {126__.out.call(_this, $self, url);127}128129});130}131}); // end each132},133134addOverlay: function(options){135$(options.overlayParentElement)136.prepend('<div class="' + options.overlayClass + '"></div>');137},138139addLoading: function(options){140$(options.loadingParentElement)141.append('<div class="' + options.loadingClass + '">' + options.loadingInner + '</div>');142},143144removeLoading: function(){145var $this = $(this);146var options = $this.data(namespace).options;147var $loading = $(options.loadingParentElement).children('.' + options.loadingClass);148149$loading.fadeOut().remove();150},151152addTimer: function(){153var _this = this;154var $this = $(this);155var options = $this.data(namespace).options;156157__.settings.timer = setTimeout(function(){158__.in.call(_this);159$(window).off('load.' + namespace);160}, options.timeoutCountdown);161},162163supportCheck: function(options){164var $this = $(this);165var props = options.browser;166var propsNum = props.length;167var support = false;168169if (propsNum === 0) {170support = true;171}172for (var i = 0; i < propsNum; i++) {173if (typeof $this.css(props[i]) === 'string') {174support = true;175break;176}177}178return support;179},180181optionCheck: function(options){182var $this = $(this);183var overlayMode;184if(options.overlay || $this.data(__.settings.data.overlay)){185overlayMode = true;186} else {187overlayMode = false;188}189return overlayMode;190},191192animationCheck : function(data, stateClass, stateIn){193var $this = $(this);194var options = $this.data(namespace).options;195var dataType = typeof data;196var dataDuration = !stateClass && dataType === 'number';197var dataClass = stateClass && dataType === 'string' && data.length > 0;198199if(dataDuration || dataClass){200data = data;201} else if(stateClass && stateIn) {202data = options.inClass;203} else if(!stateClass && stateIn) {204data = options.inDuration;205} else if(stateClass && !stateIn) {206data = options.outClass;207} else if(!stateClass && !stateIn) {208data = options.outDuration;209}210return data;211},212213in: function(){214var _this = this;215var $this = $(this);216var options = $this.data(namespace).options;217var thisInDuration = $this.data(__.settings.data.inDuration);218var thisInClass = $this.data(__.settings.data.inClass);219var inDuration = __.animationCheck.call(_this, thisInDuration, false, true);220var inClass = __.animationCheck.call(_this, thisInClass, true, true);221var overlayMode = __.optionCheck.call(_this, options);222var outClass = $this.data(namespace).outClass;223224if(options.loading) __.removeLoading.call(_this);225226if(outClass) $this.removeClass(outClass);227228if(overlayMode) {229__.inOverlay.call(_this, inClass, inDuration);230} else {231__.inDefault.call(_this, inClass, inDuration);232}233},234235inDefault: function(inClass, inDuration){236var $this = $(this);237238$this239.css({ 'animation-duration' : inDuration + 'ms' })240.addClass(inClass)241.trigger(__.settings.events.inStart)242.animateCallback(function(){243$this244.removeClass(inClass)245.css({ 'opacity' : 1 })246.trigger(__.settings.events.inEnd);247});248},249250inOverlay: function(inClass, inDuration){251var $this = $(this);252var options = $this.data(namespace).options;253254$this255.css({ 'opacity' : 1 })256.trigger(__.settings.events.inStart);257258$(options.overlayParentElement)259.children('.' + options.overlayClass)260.css({ 'animation-duration' : inDuration + 'ms' })261.addClass(inClass)262.animateCallback(function(){263$this264.trigger(__.settings.events.inEnd);265});266},267268out: function($self, url){269var _this = this;270var $this = $(this);271var options = $this.data(namespace).options;272var selfOutClass = $self.data(__.settings.data.outClass);273var thisOutClass = $this.data(__.settings.data.outClass);274var selfOutDuration = $self.data(__.settings.data.outDuration);275var thisOutDuration = $this.data(__.settings.data.outDuration);276var isOutClass = selfOutClass ? selfOutClass : thisOutClass;277var isOutDuration = selfOutDuration ? selfOutDuration : thisOutDuration;278var outClass = __.animationCheck.call(_this, isOutClass, true, false);279var outDuration = __.animationCheck.call(_this, isOutDuration, false, false);280var overlayMode = __.optionCheck.call(_this, options);281282$this.data(namespace).outClass = outClass;283284if(overlayMode) {285__.outOverlay.call(_this, outClass, outDuration, url);286} else {287__.outDefault.call(_this, outClass, outDuration, url);288}289},290291outDefault: function(outClass, outDuration, url){292var $this = $(this);293var options = $this.data(namespace).options;294295// (outDuration + 1) | #55 outDuration: 0 crashes on Safari only296$this297.css({ 'animation-duration' : (outDuration + 1) + 'ms' })298.addClass(outClass)299.trigger(__.settings.events.outStart)300.animateCallback(function(){301$this.trigger(__.settings.events.outEnd);302options.transition(url);303});304},305306307outOverlay: function(outClass, outDuration, url){308var _this = this;309var $this = $(this);310var options = $this.data(namespace).options;311var thisInClass = $this.data(__.settings.data.inClass);312var inClass = __.animationCheck.call(_this, thisInClass, true, true);313314// (outDuration + 1) | #55 outDuration: 0 crashes animsition on Safari only315$(options.overlayParentElement)316.children('.' + options.overlayClass)317.css({ 'animation-duration' : (outDuration + 1) + 'ms' })318.removeClass(inClass)319.addClass(outClass)320.trigger(__.settings.events.outStart)321.animateCallback(function(){322$this.trigger(__.settings.events.outEnd);323options.transition(url);324});325},326327destroy: function(){328return this.each(function(){329var $this = $(this);330$(window).off('.'+ namespace);331$this332.css({'opacity': 1})333.removeData(namespace);334});335}336337};338339$.fn.animateCallback = function(callback){340var end = 'animationend webkitAnimationEnd';341return this.each(function() {342var $this = $(this);343$this.on(end, function(){344$this.off(end);345return callback.call(this);346});347});348};349350$.fn.animsition = function(method){351if ( __[method] ) {352return __[method].apply( this, Array.prototype.slice.call( arguments, 1 ));353} else if ( typeof method === 'object' || ! method ) {354return __.init.apply( this, arguments );355} else {356$.error( 'Method ' + method + ' does not exist on jQuery.'+namespace);357}358};359360}));361362363