Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/core/frontend/parallax-image.js
Строк: 214
<?php
$.fn.parallaxize = (function (global, $) {
    
'use strict';

    function 
Parallax() {
        
this.init.apply(this, Array.prototype.slice.call(arguments));
    }

    
Parallax.prototype = {
        
init: function (parentsettings) {
            
this.initializeConfig(settings);
            
this.config('element'parent);
            
this.config('width'1);
            
this.config('height'1);

            
this.initializeDOM();
            
this.initializeBindings();
        },

        
initializeConfig: function (settings) {
            var 
config = {};
            
settings = $.fn.extend({variation20}, settings);

            var 
getGetter = function (object) {
                return function (
keyvalue) {
                    if (
typeof key === 'undefined') {
                        return 
object;
                    }
                    if (
typeof value === 'undefined') {
                        return 
object[key];
                    }
                    return 
object[key] = value;
                }
            };

            
this.config getGetter(config);
            
this.setting getGetter(settings);
        },

        
initializeDOM: function () {
            var 
elem this.config('element'),
                
image_container = $('<div/>'),
                
image = new Image(),
                
image_elem = $(image).appendTo(image_container),
                
me this;
            
elem.prepend(image_container);
            
image_elem.hide();

            var 
synchronous true;
            
image.onload = function () {
                
me.config('height'image_elem.height());
                
me.config('width'image_elem.width());
                
me.translate(false);

                if (
synchronous) {
                    
image_elem.show();
                } else {
                    
image_elem.fadeIn(250);
                }
            };
            
image.src elem.data('background-image');
            
setTimeout(function () {
                
synchronous false;
            }, 
150);
            
this.config('image'image_elem);

            
elem.addClass('parallaxic-container');
            
image_elem.addClass('parallaxic-image');
            
image_container.addClass('parallax-image-container');

        },

        
initializeBindings: function () {
            var 
me this;
            $(global).
scroll(function () {
                
me.translate();
            });

            $(global).
resize(function () {
                
me.translate(false);
            });
        },

        
translate: function (cache) {
            var 
transform = [
                
this.resizeTranslation(cache),
                
this.positionTranslation()
            ].
join(' ');

            
this.config('image').css({
                
transformtransform,
                
'-webkit-transform'transform,
                
'-moz-transform'transform,
                
'-o-transform'transform
            
});
        },

        
resizeTranslation: function (cached) {
            var 
scale;
            if (
cached !== false) {
                
scale this.config('scale');
                if (
scale) {
                    return 
'scale(' scale ')';
                }
            }

            var 
variation this.setting('variation'),
                
elem this.config('element'),
                
image this.config('image'),
                
height elem.height(),
                
image_height this.config('height'), image_width this.config('width'),
                
potential_height height variation 2,
                
new_width elem.width(), new_height;

            
new_height = (image_height image_width) * new_width;

            if (
new_height potential_height) {
                
new_height potential_height;
                
new_width = (image_width image_height) * new_height;
            }

            
scale Math.ceil(new_height image_height 1000) / 1000;

            
//if (Modernizr && !Modernizr.csstransforms) {
            //    image.css({
            //        width: new_width,
            //        height: new_height
            //    });
            //    return '';
            //}

            
this.config('scale'scale);
            return 
'scale(' scale ')';
        },

        
positionTranslation: function () {

            var 
variation this.setting('variation'),
                
scale this.config('scale'),
                
elem this.config('element'),
                
image this.config('image'),
                
height elem.height(), width elem.width(),
                
image_height this.config('height'), image_width this.config('width'),
                
top = (height image_height) / 2,
                
left = (width image_width) / 2,
                
scroll_percentage this.getScrollPercentage();

            
top += (variation scroll_percentage) - variation;

            
// First assume translate
            //var method_start = 'translate(', method_end = ')';
            //
            //if (Modernizr) {
            //    if (Modernizr.csstransforms3d) {
            //        method_start = 'translate3d(';
            //        method_end = ', 0px)';
            //    } else if (!Modernizr.csstransforms) {
            //        return '';
            //    }
            //}
            //return method_start + Math.round(left) + 'px, ' + Math.round(top) + 'px' + method_end;

            
return ['translate3d('Math.round(left scale), 'px, 'Math.round(top), 'px, ''0px)'].join('');
        },

        
getScrollPercentage: function () {
            var 
elem this.config('element'),
                
image this.config('image'),
                
main = $(global),
                
min elem.offset().top main.height(),
                
max elem.offset().top elem.height() - min,
                
scroll main.scrollTop() - min;

            return 
Math.max(0Math.min(1scroll max));
        }

    };

    return function (
settings) {
        
this.data('parallax', new Parallax(thissettings))
    };

}(
window, $));
?>
Онлайн: 2
Реклама