Advertisement
killrawr

Parallax Init js

Dec 12th, 2019
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Build the Parallax Animation for jQuery
  3.  * @author Michael Jones <[email protected]> 2019
  4.  */
  5. (function($, window) {
  6.  
  7.     var parallax_log_times = false;
  8.     var parallax_start = new Date().getTime();
  9.     var px_transparent_con = "transparent-parallax-con";
  10.     var px_transparent_width = "transparent-parallax-width";
  11.     var px_transparent_height = "transparent-parallax-height";
  12.     var px_parent_attached = 'px_init_slideshow_attached';
  13.     var px_parent_slide_attached = 'px_init_slideshow_slide_attached';
  14.  
  15.     jQuery(document).ready(function() {
  16.  
  17.         jQuery.px_execution_times("Open INIT PARALLAX");
  18.  
  19.         jQuery.parallax_js_doc_ready('parallaxjs');
  20.  
  21.     });
  22.  
  23.     jQuery.parallax_js_doc_ready = function(parallax_name, extra_parallax_elements, parallax_options, parallax_bgtext) {
  24.  
  25.         // The Selected Parallax Items
  26.         var parallax_ele_patterns = jQuery.parallax_js_items_pattern(parallax_name);
  27.  
  28.         // No Patterns
  29.         if (!parallax_ele_patterns.length) {
  30.             return false;
  31.         } else {
  32.             jQuery.px_execution_times("Finished Pattern Check", parallax_ele_patterns);
  33.         };
  34.  
  35.         // Parallax Items
  36.         var parallax_ele_items = jQuery(parallax_ele_patterns);
  37.  
  38.         // No Items
  39.         if (!parallax_ele_items.length) {
  40.             return false;
  41.         } else {
  42.             jQuery.px_execution_times("Finished Element Check", parallax_ele_items);
  43.         };
  44.  
  45.         // Filtered Parallax Items
  46.         var filtered_px_items = parallax_ele_items.filter_parallax_unwanted_items(parallax_name, 'parallax_js_doc_ready');
  47.  
  48.         if (!filtered_px_items.length) {
  49.             return false;
  50.         } else {
  51.             jQuery.px_execution_times('Finished DOC READY filter Check', filtered_px_items);
  52.         };
  53.  
  54.         // We have PX ITEMS
  55.         var filterResult = filtered_px_items.parallax_js_doc_elements(parallax_name, extra_parallax_elements, parallax_options, parallax_bgtext);
  56.  
  57.         // Undefind Test
  58.         if (typeof(filterResult) === 'undefined') {
  59.             filterResult = true;
  60.         };
  61.  
  62.         jQuery.px_execution_times('Finished DOC READY Event', filterResult);
  63.  
  64.         // Done
  65.         return filterResult;
  66.  
  67.     };
  68.  
  69.     jQuery.parallax_js_items_pattern = function(parallax_name) {
  70.  
  71.         if (Boolean(parallax_name) == false) {
  72.             return false;
  73.         };
  74.  
  75.         if (String(parallax_name).length == false) {
  76.             return false;
  77.         };
  78.  
  79.         var parallax_pattern_suffix = [];
  80.         parallax_pattern_suffix.push('text-parallax-parent');
  81.  
  82.         var parallax_ele_patterns = [];
  83.  
  84.         // Build the Patterns from NAME and SUFFIX ITEMS
  85.         for (var x = 0; x < parallax_pattern_suffix.length; x++) {
  86.  
  87.             var parallax_pattern_suffix_x = parallax_pattern_suffix[x];
  88.             var parallax_pattern_name_suffix = "div." + String(parallax_name).trim() + '-' + String(parallax_pattern_suffix_x).trim();
  89.             parallax_pattern_name_suffix += ":not([data-parallax=\"scroll\"])";
  90.  
  91.             parallax_ele_patterns.push(parallax_pattern_name_suffix);
  92.  
  93.         };
  94.  
  95.         // Px Pattern String
  96.         return parallax_ele_patterns.join(',');
  97.  
  98.     };
  99.  
  100.     jQuery.fn.find_parallax_js_items = function(parallax_name, find_px_key) {
  101.  
  102.         var originalElement = jQuery(this);
  103.         var parentClassName = String(jQuery.parallax_js_items(parallax_name).items[find_px_key]).trim();
  104.  
  105.         if (originalElement.hasClass(parentClassName.replace('.', ''))) {
  106.             return originalElement;
  107.         };
  108.  
  109.         return jQuery(originalElement).find(parentClassName).first();
  110.  
  111.     };
  112.  
  113.     jQuery.fn.parallax_js_doc_elements = function(parallax_name, extra_parallax_elements, parallax_options, parallax_bgtext) {
  114.  
  115.         var parallax_ele_items = jQuery(this);
  116.  
  117.         if (!parallax_ele_items.length) {
  118.             return false;
  119.         } else {
  120.             jQuery.px_execution_times("Finished Item Check", parallax_ele_items);
  121.         };
  122.  
  123.         var filtered_ele_items = parallax_ele_items.filter_parallax_unwanted_items(parallax_name, 'parallax_js_doc_elements');
  124.  
  125.         if (!filtered_ele_items.length) {
  126.             return false;
  127.         } else {
  128.             jQuery.px_execution_times("Finished Item Filter", filtered_ele_items);
  129.         };
  130.  
  131.         if (Boolean(jQuery().parallax_js_init_effects) == false) {
  132.             console.warn("fn.parallax_js_init_effects Cannot be Found");
  133.             return false;
  134.         } else {
  135.             jQuery.px_execution_times("Finished Checking for Effects");
  136.         }
  137.  
  138.         if (Boolean(jQuery().parallax) == false) {
  139.             console.warn("Load Parallax Library");
  140.             return false;
  141.         } else {
  142.             jQuery.px_execution_times("Finished Checking for Parallax");
  143.         };
  144.  
  145.         if (typeof(parallax_options) === 'undefined') {
  146.             parallax_options = {};
  147.         } else {
  148.             jQuery.px_execution_times("Finished Option Configuration");
  149.         }
  150.  
  151.         var parallax_attach_px = function(this_px_parent) {
  152.  
  153.             var parallax_parent = jQuery(this_px_parent);
  154.             var parallax_px_patterns = jQuery.parallax_js_items(parallax_name).items;
  155.  
  156.             var parallax_img_patterns = [];
  157.  
  158.             // Primary TEXT item
  159.             parallax_img_patterns.push(parallax_px_patterns.text);
  160.  
  161.             // Other Elements that we can Parallax
  162.             if (typeof(extra_parallax_elements) !== 'undefined') {
  163.                 parallax_img_patterns.push(extra_parallax_elements)
  164.             };
  165.  
  166.             var parallax_img_patterns_string = parallax_img_patterns.join(',');
  167.  
  168.             // Find the Parallax DATA
  169.             var parallax_window = parallax_parent.find(parallax_px_patterns.window);
  170.             var parallax_img = parallax_parent.find(parallax_img_patterns_string);
  171.  
  172.             // No Image
  173.             if (!parallax_img.length) {
  174.                 console.warn("No Parallax Image Section can found");
  175.                 return false;
  176.             };
  177.  
  178.             // Parallax Box DATA
  179.             var px_box_options = parallax_parent.Find_Parallax_Init_Boxes(parallax_img);
  180.  
  181.             // Default Parallax Information
  182.             var parallax_default_options = {
  183.                 'boxElement': px_box_options.parallaxBox,
  184.                 'boxWidthElement': px_box_options.widthBox,
  185.                 'boxHeightElement': px_box_options.heightBox,
  186.                 'mirrorContainer': parallax_window,
  187.             };
  188.  
  189.             if (!parallax_default_options.boxElement.length) {
  190.                 parallax_default_options.boxElement = false;
  191.             };
  192.  
  193.             if (!parallax_default_options.boxWidthElement.length) {
  194.                 parallax_default_options.boxWidthElement = false;
  195.             };
  196.  
  197.             if (!parallax_default_options.boxHeightElement.length) {
  198.                 parallax_default_options.boxHeightElement = false;
  199.             };
  200.  
  201.             var parallax_img_class = '';
  202.  
  203.             if (typeof(parallax_bgtext) === 'undefined') {
  204.                 parallax_bgtext = "ckeditor-bgimage";
  205.             }
  206.  
  207.             if (parallax_img.hasClass(parallax_name + '-text-parallax-img')) {
  208.                 parallax_img_class = false;
  209.             } else if (parallax_img.hasClass(parallax_bgtext)) {
  210.                 parallax_img_class = parallax_bgtext;
  211.             };
  212.  
  213.             // Default Settings for Parallax
  214.             var parallax_result_options = {};
  215.  
  216.             // Option Values
  217.             parallax_result_options = jQuery.extend(parallax_result_options, parallax_default_options);
  218.  
  219.             // Option Keys
  220.             var parallax_options_keys = Object.keys(parallax_options);
  221.  
  222.             // Loop over Parallax Options
  223.             for (var x = 0; x < parallax_options_keys.length; x++) {
  224.  
  225.                 var parallax_options_key = parallax_options_keys[x];
  226.                 var parallax_options_value = parallax_options[parallax_options_key];
  227.                 var parallax_options_result = false;
  228.  
  229.                 if (typeof(parallax_result_options[parallax_options_key]) === 'undefined') {
  230.                     parallax_options_result = parallax_options_value;
  231.                 } else {
  232.                     parallax_options_result = parallax_result_options[parallax_options_key];
  233.                 };
  234.  
  235.                 parallax_result_options[parallax_options_key] = parallax_options_result;
  236.  
  237.             };
  238.  
  239.             var pxEffectResult = parallax_img.parallax_js_init_effects(parallax_img_class, parallax_result_options, parallax_name, extra_parallax_elements);
  240.  
  241.             if (typeof(pxEffectResult) === 'undefined') {
  242.                 pxEffectResult = true;
  243.             };
  244.  
  245.             return Boolean(pxEffectResult);
  246.  
  247.         };
  248.  
  249.         var slideshow_px_types = {
  250.             'malsup_cycle': [],
  251.         };
  252.  
  253.         var first_parallax_ele_item = parallax_ele_items.first();
  254.         var hasMalSupCycle = Boolean(typeof(slideshow_px_types['malsup_cycle']) !== 'undefined');
  255.  
  256.         jQuery.px_execution_times("Started PX Loop", parallax_ele_items);
  257.         jQuery.px_execution_times("First Loop Item", first_parallax_ele_item);
  258.  
  259.         parallax_ele_items.each(function(this_px_index, this_px_item) {
  260.  
  261.             var px_item = jQuery(this_px_item);
  262.             var isFirst = px_item.get(0).isSameNode(first_parallax_ele_item.get(0));
  263.  
  264.             if (hasMalSupCycle && !isFirst) {
  265.  
  266.                 var cycle_parent = jQuery();
  267.  
  268.                 cycle_parent = px_item.parents('.cycle-slideshow').length;
  269.  
  270.                 if (typeof(px_item.data('parallax-img-src')) !== 'undefined') {
  271.                     cycle_parent = jQuery();
  272.                 };
  273.  
  274.                 if (cycle_parent) {
  275.                     slideshow_px_types.malsup_cycle.push(px_item);
  276.                     return true;
  277.                 };
  278.  
  279.             };
  280.  
  281.             jQuery.px_execution_times("Attached PX during loop", this_px_item);
  282.             parallax_attach_px(this_px_item);
  283.  
  284.         });
  285.  
  286.         var slideshow_px_type_keys = Object.keys(slideshow_px_types);
  287.         var slideshow_px_type_parents = {};
  288.  
  289.         for (var y = 0; y < slideshow_px_type_keys.length; y++) {
  290.  
  291.             var slideshow_px_type_key = slideshow_px_type_keys[y];
  292.             var slideshow_px_type_items = slideshow_px_types[slideshow_px_type_key];
  293.  
  294.             if (slideshow_px_type_items.length == false) {
  295.                 continue;
  296.             } else {
  297.                 slideshow_px_type_parents[slideshow_px_type_key] = [];
  298.             };
  299.  
  300.             jQuery(slideshow_px_type_items).each(function(this_cycle_index, this_cycle_item) {
  301.  
  302.                 var slideshow_px_item = jQuery(this_cycle_item);
  303.                 var slideshow_px_parent = jQuery();
  304.  
  305.                 switch (slideshow_px_type_key) {
  306.                     case 'malsup_cycle':
  307.                         slideshow_px_parent = slideshow_px_item.parents('.cycle-slideshow');
  308.                         break;
  309.                 };
  310.  
  311.                 if (slideshow_px_parent.length && slideshow_px_parent.hasClass(px_parent_attached)) {
  312.                     return true;
  313.                 };
  314.  
  315.                 slideshow_px_type_parents[slideshow_px_type_key].push(slideshow_px_parent.get(0));
  316.             });
  317.  
  318.         };
  319.  
  320.         var slideshow_px_type_parents_keys = Object.keys(slideshow_px_type_parents);
  321.  
  322.         var parallax_attach_px_slide = function(cycleSlide) {
  323.  
  324.             var cycleSlide = jQuery(cycleSlide);
  325.  
  326.             if (cycleSlide.hasClass(px_parent_slide_attached)) {
  327.                 return true;
  328.             };
  329.  
  330.             var pxItems = cycleSlide.find_parallax_js_items(parallax_name, 'parent');
  331.  
  332.             if (!pxItems.length) {
  333.                 return true;
  334.             };
  335.  
  336.             var cycleSuccess = false;
  337.  
  338.             // Parallax Elements
  339.             jQuery(pxItems).each(function(this_cycle_px_index, this_cycle_px_item) {
  340.  
  341.                 // Attach Parallax
  342.                 var cycleAttached = parallax_attach_px(this_cycle_px_item);
  343.  
  344.                 // Update the Success of this Element
  345.                 cycleSuccess = (Boolean(cycleSuccess) || Boolean(cycleAttached));
  346.  
  347.             });
  348.  
  349.             // Cycle Success
  350.             if (cycleSuccess) {
  351.                 cycleSlide.addClass(px_parent_slide_attached);
  352.             };
  353.  
  354.             // Done
  355.             return cycleSuccess;
  356.  
  357.         };
  358.  
  359.         var parallax_attach_px_first_slide = function(cycleSlideShow, cycleDataPattern, cycleActiveClass) {
  360.  
  361.             var cyclePattern = String(jQuery(cycleSlideShow).data(cycleDataPattern)).trim();
  362.             var cycleActivePattern = String(cyclePattern + '' + cycleActiveClass).trim();
  363.             var cycleSlider = jQuery(cycleSlideShow).find(cycleActivePattern);
  364.  
  365.             if (!cycleSlider.length) {
  366.                 cycleSlider = jQuery(cycleSlideShow).find(cyclePattern);
  367.             };
  368.  
  369.             jQuery.px_execution_times("Attach Parallax to First Slide");
  370.  
  371.             var pxAttached = parallax_attach_px_slide(cycleSlider);
  372.  
  373.             if (Boolean(pxAttached)) {
  374.                 jQuery(cycleSlideShow).addClass(px_parent_attached);
  375.             };
  376.  
  377.         };
  378.  
  379.         for (var x = 0; x < slideshow_px_type_parents_keys.length; x++) {
  380.  
  381.             var slideshow_px_type_parent_key = slideshow_px_type_parents_keys[x];
  382.             var slideshow_px_type_parent_err_suffix = 'is not set for slideshow_px_type_parent_key (' + slideshow_px_type_parent_key + ')';
  383.  
  384.             var slideshow_px_type_parent_s = [];
  385.             slideshow_px_type_parent_s = slideshow_px_type_parents[slideshow_px_type_parent_key];
  386.             slideshow_px_type_parent_s = jQuery.unique(slideshow_px_type_parent_s);
  387.  
  388.             jQuery(slideshow_px_type_parent_s).each(function(this_slider_index, this_slider_item) {
  389.  
  390.                 var px_slider_item = jQuery(this_slider_item);
  391.  
  392.                 // Property for Slider
  393.                 var px_cycle_active = false;
  394.                 var px_cycle_loop = false;
  395.                 var px_cycle_start = false;
  396.                 var px_cycle_slide_pattern = false;
  397.  
  398.                 // Case to find Info
  399.                 switch (slideshow_px_type_parent_key) {
  400.                     case 'malsup_cycle':
  401.                         px_cycle_active = '.cycle-slide-active';
  402.                         px_cycle_loop = 'cycle-update-view-after';
  403.                         px_cycle_start = 'cycle-initialized';
  404.                         px_cycle_slide_pattern = "cycle-slides";
  405.                         break;
  406.                 };
  407.  
  408.                 if (Boolean(px_cycle_slide_pattern) == false) {
  409.                     console.error('px_cycle_slide_pattern ' + slideshow_px_type_parent_err_suffix);
  410.                     return true;
  411.                 };
  412.  
  413.                 if (Boolean(px_cycle_loop) == false) {
  414.                     console.error('px_cycle_loop is not set ' + slideshow_px_type_parent_err_suffix);
  415.                     return true;
  416.                 };
  417.  
  418.                 if (Boolean(px_cycle_start) == false) {
  419.                     console.error('px_cycle_start is not set for ' + slideshow_px_type_parent_err_suffix);
  420.                     return true;
  421.                 };
  422.  
  423.                 if (Boolean(px_cycle_active) == false) {
  424.                     console.error('px_cycle_active is not set for ' + slideshow_px_type_parent_err_suffix);
  425.                     return true;
  426.                 };
  427.  
  428.                 var px_slider_started = Boolean(false);
  429.                 px_slider_started = (px_slider_started || Boolean(px_slider_item.find(px_cycle_active).length));
  430.                 px_slider_started = (px_slider_started || Boolean(px_slider_item.data('cycle-auto-init') == false));
  431.  
  432.                 jQuery(this_slider_item).on(px_cycle_loop, function(evt) {
  433.                     var cycleSlide = arguments[3];
  434.                     parallax_attach_px_slide(cycleSlide);
  435.                 });
  436.  
  437.                 if (px_slider_started) {
  438.                     parallax_attach_px_first_slide(px_slider_item.get(0), px_cycle_slide_pattern, px_cycle_active);
  439.                 };
  440.  
  441.             });
  442.  
  443.         };
  444.  
  445.     };
  446.  
  447.     jQuery.parallax_js_items = function(parallax_name) {
  448.  
  449.         if (typeof(parallax_name) === 'undefined') {
  450.             parallax_name = 'parallaxjs';
  451.         };
  452.  
  453.         var parallax_class_name = '.' + String(parallax_name).trim();
  454.  
  455.         var parallaxjs_class_items = {
  456.             parent: parallax_class_name + '-text-parallax-parent',
  457.             window: parallax_class_name + '-text-parallax-window',
  458.             text: parallax_class_name + '-text-parallax-img',
  459.             data: parallax_class_name + '-text-parallax-data',
  460.         };
  461.  
  462.         var parallaxjs_items = {
  463.             name: parallax_name,
  464.             loaded: 'parallaxjs-init-parallax-init-loaded',
  465.             loaded_class: '',
  466.             items: parallaxjs_class_items,
  467.         };
  468.  
  469.         parallaxjs_items.loaded_class = '.' + parallaxjs_items.loaded;
  470.         parallaxjs_items.loaded_class = String(parallaxjs_items.loaded_class).trim();
  471.  
  472.         // Parallax DATA
  473.         return parallaxjs_items;
  474.  
  475.     };
  476.  
  477.     jQuery.fn.parallax_js_init_items = function(parallax_class, parallax_options, parallax_name) {
  478.  
  479.         var ParallaxParent = jQuery(this);
  480.         ParallaxParent = ParallaxParent.filter_parallax_unwanted_items(parallax_name, 'parallax_js_init_items');
  481.  
  482.         if (!ParallaxParent.length) {
  483.             return false;
  484.         };
  485.  
  486.         var ParallaxElement = jQuery();
  487.         var ParallaxWindowElement = jQuery();
  488.         var ParallaxResults = [];
  489.  
  490.         if (!Boolean(parallax_class) || ParallaxParent.hasClass(parallax_class)) {
  491.             ParallaxElement = ParallaxParent;
  492.         } else {
  493.             ParallaxElement = ParallaxParent.find(parallax_class);
  494.         };
  495.  
  496.         if (!Boolean(parallax_options)) {
  497.             parallax_options = {};
  498.         };
  499.  
  500.         var parallaxjs_data = jQuery.parallax_js_items(parallax_name);
  501.  
  502.         var parallaxjs_items = parallaxjs_data.items;
  503.         var parallaxjs_items_keys = Object.keys(parallaxjs_items);
  504.         var parallaxjs_dummy_function = function() {
  505.             // Do nothing
  506.         };
  507.  
  508.         ParallaxElement.each(function(img_index, img_element) {
  509.  
  510.             var img_element = jQuery(img_element);
  511.             var is_loaded = Boolean(img_element.hasClass(parallaxjs_data.loaded));
  512.             var parallax_parent = img_element.parents(parallaxjs_items.parent);
  513.  
  514.             if (is_loaded == false) {
  515.                 img_element.addClass(parallaxjs_data.loaded);
  516.             } else {
  517.                 return true;
  518.             };
  519.  
  520.             if (!parallax_parent.length) {
  521.                 return true;
  522.             };
  523.  
  524.             var parallax_obj = {
  525.                 'img': img_element,
  526.                 'classes': parallaxjs_data,
  527.                 'items': {},
  528.                 'parallax_started': false,
  529.                 'start_parallax': parallaxjs_dummy_function,
  530.             };
  531.  
  532.             // Find the Items on this Parallax Obj
  533.             for (var x = 0; x < parallaxjs_items_keys.length; x++) {
  534.  
  535.                 var parallaxjs_key = parallaxjs_items_keys[x];
  536.                 var parallaxjs_value = parallaxjs_items[parallaxjs_key];
  537.                 var parallaxjs_result = false;
  538.  
  539.                 switch (parallaxjs_key) {
  540.                     case 'parent':
  541.                         parallaxjs_result = parallax_parent;
  542.                         break;
  543.                     default:
  544.                         parallaxjs_result = parallax_parent.find(parallaxjs_value);
  545.                         break;
  546.                 };
  547.  
  548.                 parallax_obj.items[parallaxjs_key] = parallaxjs_result;
  549.  
  550.             };
  551.  
  552.  
  553.             // Start the Parallax Object
  554.             parallax_obj.start_parallax = function() {
  555.  
  556.                 var parallax_item = this;
  557.                 var img_element = jQuery(parallax_item.img);
  558.  
  559.                 // Parallax has already started
  560.                 if (parallax_item.parallax_started) {
  561.                     jQuery.px_execution_times("Parallax has already started");
  562.                     return true;
  563.                 } else {
  564.                     jQuery.px_execution_times("Applying Parallax!");
  565.                 }
  566.  
  567.                 var img_element = jQuery(parallax_item.img);
  568.  
  569.                 var parallax_parent = jQuery(parallax_item.items.parent);
  570.                 var parallax_window = jQuery(parallax_item.items.window);
  571.                 // var parallax_text = jQuery(parallax_item.items.img);
  572.                 var parallax_data_item = jQuery();
  573.                 var parallax_data_text = "";
  574.                 var parallax_data = {};
  575.  
  576.                 if (!parallax_window.length) {
  577.                     jQuery.px_execution_times("Cannot find PX Window");
  578.                     return false;
  579.                 } else {
  580.                     jQuery.px_execution_times("Found PX Window");
  581.                 };
  582.  
  583.                 if (parallax_parent && parallax_parent.length) {
  584.                     parallax_data_item = parallax_parent.find(parallax_item.items.data);
  585.                 } else {
  586.                     parallax_data_item = img_element.closest(parallax_item.items.data);
  587.                 };
  588.  
  589.                 if (parallax_data_item && parallax_data_item.length) {
  590.                     parallax_data_text = parallax_data_item.text().trim();
  591.                 };
  592.  
  593.                 if (parallax_data_text && parallax_data_text.length) {
  594.                     parallax_data = JSON.parse(parallax_data_text);
  595.                 };
  596.  
  597.                 var img_bg_elment = img_element.clone();
  598.                 var img_bg_elment_data = img_bg_elment.data();
  599.                 var img_bg_elment_type = img_bg_elment.prop('tagName');
  600.                 var img_bg_src = false;
  601.  
  602.                 switch (img_bg_elment_type) {
  603.                     case 'IMG':
  604.                         img_bg_src = img_bg_elment.attr('src');
  605.                         img_bg_src = Boolean(img_bg_src) ? img_bg_src : false;
  606.                         break;
  607.                     default:
  608.                         img_bg_src = img_bg_elment.css('background-image');
  609.                         img_bg_src = Boolean(img_bg_src) ? img_bg_src : img_bg_elment.data('image-src');
  610.                         img_bg_src = Boolean(img_bg_src) ? img_bg_src : img_bg_elment.data("image-src");
  611.                         img_bg_src = Boolean(img_bg_src) ? img_bg_src : false;
  612.                         break;
  613.                 };
  614.  
  615.                 if (Boolean(img_bg_src) == false) {
  616.                     jQuery.px_execution_times("Extracting \"img_bg_src\" from parallax_window", parallax_window);
  617.                     img_bg_src = Boolean(img_bg_src) ? img_bg_src : parallax_window.data('image-src');
  618.                 };
  619.  
  620.                 if (typeof(img_bg_src) === 'undefined') {
  621.                     img_bg_src = "";
  622.                 } else if (img_bg_src === 'initial') {
  623.                     img_bg_src = "";
  624.                 };
  625.  
  626.                 if (!Boolean(img_bg_src)) {
  627.                     img_bg_src = img_bg_elment.data('parallax-img-src');
  628.                     img_bg_src = typeof(img_bg_src) !== 'undefined' ? img_bg_src : "";
  629.                 };
  630.  
  631.                 // https://stackoverflow.com/questions/2116558/fastest-method-to-replace-all-instances-of-a-character-in-a-string
  632.                 img_bg_src = img_bg_src.replace('url("', '');
  633.                 img_bg_src = img_bg_src.replace("\")", '');
  634.                 img_bg_src = img_bg_src.replace('url(\'', '');
  635.                 img_bg_src = img_bg_src.replace("')", '');
  636.                 // img_bg_src = img_bg_src.replace(new RegExp("\"", 'g'), '');
  637.                 // img_bg_src = img_bg_src.replace(new RegExp("'", 'g'), '');
  638.                 img_bg_src = img_bg_src.trim();
  639.                 img_bg_src = (!img_bg_src.length || String(img_bg_src) === 'none') ? false : img_bg_src;
  640.  
  641.                 if (typeof(img_bg_src) !== 'undefined' && img_bg_src == 'initial') {
  642.                     img_bg_src = false;
  643.                 };
  644.  
  645.                 if (Boolean(img_bg_src) && img_bg_src.length) {
  646.  
  647.                     jQuery.px_execution_times("Found img_bg_src for PX EVENT", img_bg_src);
  648.  
  649.                     var img_bg_position = img_bg_elment.css('background-position');
  650.  
  651.                     if (typeof(img_bg_position) === 'undefined') {
  652.                         img_bg_position = "";
  653.                     };
  654.  
  655.                     if (!img_bg_position.length) {
  656.                         img_bg_position = "auto auto";
  657.                     };
  658.  
  659.                     var parallax_img_options = {
  660.                         imageSrc: img_bg_src,
  661.                         sliderParallaxClasses: 'normal_image',
  662.                         speed: img_bg_elment.data('parallaxSpeed'),
  663.                         position: img_bg_position,
  664.                         parallaxIsFullWidth: img_bg_elment.data('parallaxFullWidth'),
  665.                         overScrollFix: true,
  666.                     };
  667.  
  668.                     if (typeof(parallax_img_options.parallaxIsFullWidth) === 'undefined') {
  669.                         parallax_img_options.parallaxIsFullWidth = true;
  670.                     } else {
  671.                         parallax_img_options.parallaxIsFullWidth = Boolean(parallax_img_options.parallaxIsFullWidth);
  672.                     };
  673.  
  674.                     var parallax_data_keys = [];
  675.  
  676.                     // Image Option Keys
  677.                     var parallax_img_options_keys = Object.keys(parallax_img_options);
  678.  
  679.                     // Add the Default Options
  680.                     parallax_data_keys.add_parallax_keys(parallax_img_options_keys);
  681.  
  682.                     // Option Keys
  683.                     var parallax_options_keys = Object.keys(parallax_options);
  684.  
  685.                     // Add the Option Keys to our LIST
  686.                     if (parallax_options_keys && parallax_options_keys.length) {
  687.                         parallax_data_keys.add_parallax_keys(parallax_options_keys);
  688.                     };
  689.  
  690.                     // Add our DATA options
  691.                     if (parallax_data && parallax_data.length) {
  692.                         parallax_data_keys.add_parallax_keys(parallax_data.keys);
  693.                     };
  694.  
  695.                     // Make the List Unique
  696.                     parallax_data_keys = parallax_data_keys.unique_parallax_keys();
  697.  
  698.                     // Merge the DATA into the Parallax
  699.                     if (parallax_data_keys && parallax_data_keys.length) {
  700.  
  701.                         for (var i = 0; i < parallax_data_keys.length; i++) {
  702.  
  703.                             var parallax_data_key = parallax_data_keys[i];
  704.                             var parallax_extended_value = undefined;
  705.  
  706.                             if (typeof(parallax_data[parallax_data_key]) !== 'undefined') {
  707.                                 parallax_extended_value = parallax_data[parallax_data_key];
  708.                             } else if (typeof(parallax_options[parallax_data_key]) !== 'undefined') {
  709.                                 parallax_extended_value = parallax_options[parallax_data_key];
  710.                             };
  711.  
  712.                             var parallax_input_value = false;
  713.  
  714.                             if (typeof(parallax_img_options[parallax_data_key]) !== 'undefined') {
  715.                                 parallax_input_value = parallax_img_options[parallax_data_key];
  716.                             } else if (typeof(parallax_extended_value) !== 'undefined') {
  717.                                 parallax_input_value = parallax_extended_value;
  718.                             } else {
  719.                                 parallax_input_value = false;
  720.                             };
  721.  
  722.                             if (typeof(parallax_extended_value) !== 'undefined') {
  723.                                 switch (parallax_data_key) {
  724.                                     case 'sliderParallaxClasses':
  725.                                         parallax_img_options[parallax_data_key] += ' ' + String(parallax_extended_value).trim();
  726.                                         break;
  727.                                     default:
  728.                                         parallax_img_options[parallax_data_key] = parallax_input_value;
  729.                                         break;
  730.                                 };
  731.                             } else {
  732.                                 parallax_img_options[parallax_data_key] = parallax_input_value;
  733.                             };
  734.  
  735.                         };
  736.  
  737.                     };
  738.  
  739.                     if (typeof(parallax_img_options['speed']) === 'undefined' || !parallax_img_options['speed']) {
  740.                         delete parallax_img_options['speed'];
  741.                     };
  742.  
  743.                     switch (parallax_img_options.position) {
  744.                         case 'center center':
  745.                             img_element.addClass('parallax-mirror-center-center');
  746.                             break
  747.                     };
  748.  
  749.                     img_element.addClass('parallax-mirror-origin');
  750.                     parallax_parent.addClass("parallax-mirror-parent");
  751.  
  752.                     // The Parallax Options
  753.                     jQuery.px_execution_times("parallax_img_options", parallax_img_options);
  754.  
  755.                     // Parallax Applied
  756.                     img_element.parallax(parallax_img_options);
  757.  
  758.                     // Parallax Finished
  759.                     parallax_item.parallax_started = true;
  760.  
  761.                     // Applied Result
  762.                     return true;
  763.  
  764.                 } else {
  765.                     jQuery.px_execution_times("Cannot find img_bg_src (" + img_bg_src + ")");
  766.                 };
  767.  
  768.                 // Nothing was done
  769.                 return false;
  770.  
  771.             };
  772.  
  773.             ParallaxResults.push(parallax_obj);
  774.  
  775.         });
  776.  
  777.         return ParallaxResults;
  778.  
  779.     };
  780.  
  781.     jQuery.fn.parallax_js_init_effects = function(parallax_class, parallax_options, parallax_name, extra_parallax_elements) {
  782.  
  783.         var parallaxjs_items = jQuery(this).parallax_js_init_items(parallax_class, parallax_options, parallax_name);
  784.         var parallaxjs_items_len = Number(parallaxjs_items.length);
  785.  
  786.         if (!parallaxjs_items.length) {
  787.             // console.warn("parallaxjs_items is empty");
  788.             return false;
  789.         } else {
  790.             jQuery.px_execution_times("Finished Locating PX js items");
  791.         }
  792.  
  793.         for (var y = 0; y < parallaxjs_items.length; y++) {
  794.             var parallax_item = parallaxjs_items[y];
  795.             parallax_item.start_parallax();
  796.         };
  797.  
  798.         return true;
  799.  
  800.     };
  801.  
  802.     jQuery.fn.Find_Parallax_Init_Boxes = function(parallax_img) {
  803.  
  804.         var parallax_parent = jQuery(this);
  805.  
  806.         var px_pos_boxes = {
  807.             'widthBox': parallax_parent.Find_Parallax_Init_Box(px_transparent_width, parallax_img),
  808.             'heightBox': parallax_parent.Find_Parallax_Init_Box(px_transparent_height, parallax_img),
  809.             'parallaxBox': parallax_parent.Find_Parallax_Init_Box(px_transparent_con, parallax_img),
  810.         };
  811.  
  812.         px_pos_boxes.widthBox = px_pos_boxes.widthBox.length ? px_pos_boxes.widthBox : px_pos_boxes.heightBox;
  813.         px_pos_boxes.heightBox = px_pos_boxes.heightBox.length ? px_pos_boxes.heightBox : px_pos_boxes.widthBox;
  814.  
  815.         return px_pos_boxes;
  816.  
  817.     };
  818.  
  819.     jQuery.fn.Find_Parallax_Init_Box = function(parallax_class_name, parallax_img) {
  820.  
  821.         var parallax_parent = jQuery(this);
  822.  
  823.         var parallax_result = parallax_parent.parents("div." + parallax_class_name);
  824.         parallax_result = parallax_result.length ? parallax_result : jQuery();
  825.  
  826.         if (!parallax_result.length && parallax_img.hasClass(parallax_class_name)) {
  827.             parallax_result = parallax_img;
  828.         };
  829.  
  830.         if (!parallax_result.length && parallax_parent.hasClass(parallax_class_name)) {
  831.             parallax_result = parallax_parent;
  832.         };
  833.  
  834.         return parallax_result;
  835.  
  836.     };
  837.  
  838.     function unique_parallax_key(value, index, self) {
  839.  
  840.         return Boolean(self.indexOf(value) === index);
  841.  
  842.     };
  843.  
  844.     Array.prototype.unique_parallax_keys = function() {
  845.  
  846.         var current_list = this;
  847.         var unique_list = current_list.filter(unique_parallax_key);
  848.  
  849.         return unique_list;
  850.  
  851.     };
  852.  
  853.     Array.prototype.add_parallax_keys = function(new_px_keys) {
  854.  
  855.         var current_list = this;
  856.  
  857.         for (var x = 0; x < new_px_keys.length; x++) {
  858.             var px = new_px_keys[x];
  859.             current_list.push(px);
  860.         };
  861.  
  862.         return current_list;
  863.  
  864.     };
  865.  
  866.     jQuery.fn.filter_parallax_unwanted_items = function(parallax_name, caller_name) {
  867.  
  868.         var currentParallaxItems = jQuery(this);
  869.         var wantedParallaxItems = [];
  870.  
  871.         var unwanted_parallax_class_names = [];
  872.         unwanted_parallax_class_names.push("cycle-sentinel");
  873.  
  874.         if (!unwanted_parallax_class_names.length) {
  875.             return currentParallaxItems;
  876.         };
  877.  
  878.         currentParallaxItems.each(function(current_px_index, current_px_item) {
  879.  
  880.             var px_item = jQuery(current_px_item);
  881.             var is_unwanted = jQuery();
  882.  
  883.             for (var x = 0; x < unwanted_parallax_class_names.length; x++) {
  884.  
  885.                 var unwanted_px_class_name = unwanted_parallax_class_names[x];
  886.  
  887.                 if (px_item.hasClass(unwanted_px_class_name)) {
  888.                     is_unwanted = px_item;
  889.                     break;
  890.                 };
  891.  
  892.                 if (px_item.parents('.' + unwanted_px_class_name).length) {
  893.                     is_unwanted = px_item;
  894.                     break;
  895.                 };
  896.  
  897.             };
  898.  
  899.             if (!is_unwanted.length) {
  900.                 wantedParallaxItems.push(px_item.get(0));
  901.             };
  902.  
  903.         });
  904.  
  905.         return jQuery(wantedParallaxItems);
  906.  
  907.     };
  908.  
  909.     jQuery.px_execution_times = function(message_text, message_item) {
  910.  
  911.         if (!parallax_log_times) {
  912.             return false;
  913.         };
  914.  
  915.         var parallax_end = new Date().getTime();
  916.         var parallax_duration = (parallax_end - parallax_start);
  917.  
  918.         var parallax_content = [];
  919.  
  920.         parallax_content.push("[parallax_init.js]");
  921.         parallax_content.push(message_text);
  922.         parallax_content.push(" (Time: " + parallax_duration + ")");
  923.  
  924.         var parallax_content_text = parallax_content.join(" ").trim();
  925.  
  926.         if (typeof(message_item) !== 'undefined') {
  927.             console.log(parallax_content_text, message_item);
  928.         } else {
  929.             console.log(parallax_content_text);
  930.         };
  931.  
  932.     };
  933.  
  934. }(jQuery, window));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement