Вход Регистрация
Файл: js/jquery.maximage.js
Строк: 341
<?php
// Copyright ©2009 Aaron Vanderzwan, by Aaron Vanderzwan
// Thanks to Skye Giordano for the suggestion of the resizeMsg option.
// 
// LICENSE
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
// 
// VERSION: 1.1.7




(function($) {
// The maxImages plugin resizes an image dynamically, according to the width of the browser.
jQuery.fn.maxImage = function(options) {
  
  var 
resizeMsgDefaults = {showfalselocation'before'message'Original: ([w]w x [h]h)'};
  
  
// var opts = $.extend({}, $.fn.maxImage.defaults, options);
  
var opts jQuery.extend({
    
wait:                 true,
    
imageArray:           [],
    
maxFollows:           'both',  // Options: width, height, both
    
verticalOffset:       0,
    
horizontalOffset:     0,
    
leftSpace:            0,
    
topSpace:             0,
    
rightSpace:           0,
    
bottomSpace:          0,
        
overflow:                         'hidden',
    
position:             'absolute',
    
isBackground:         false,
    
zIndex:               -1,
    
verticalAlign:        'center',
    
horizontalAlign:      'center',
    
maxAtOrigImageSize:   false,
    
slideShow:            false,
    
slideDelay:           5,
    
slideShowTitle:       true,
    
loaderClass:          'loader',
    
resizeMsg:            resizeMsgDefaults,
    
onImageShow:          function(){}    
  }, 
options);
  
  
// var resizeDefaults = {show: false, location: 'before', message: '(resized)'};
  
opts.resizeMsg jQuery.extend(resizeMsgDefaultsoptions.resizeMsg)
  
  
// Cache jQuery object
  
var jQueryMatchedObj this;
  
  function 
_initialize() {
    
_start(this,jQueryMatchedObj);
    return 
false;
  }
  
  function 
_start(image,jQueryMatchedObj) {
    if( 
opts.slideShow ){
      
_setup_slideshow(jQueryMatchedObj);
    } else if ( 
opts.isBackground ){
      
Background._setup_background(image);
    } else {
             
Others._setup_others(image,opts);
    }
  }
  
  
Others = {
    
_setup_others: function(image,opts){
      
$this = $(image);
        
$this.hide();
          
        
Others._configure_css(image,opts);
        $(
window).load(function(){
            
_get_orig_data($this);
            
_size_image($this);
              
_center_image($this);
            
$this.show();
            $(
'.'+opts.loaderClass).hide();
            
opts.onImageShow.call(this);
            $(
window).resize(function(){
                
_size_image($this);
                
_center_image($this);
            });
        });
    },
    
_configure_css: function(image,opts){
      if(
opts.position == 'absolute') {
                
        $(
image).css({
          
'overflow':   'hidden',
          
'left':       opts.leftSpace,
          
'top':        opts.topSpace,
          
'position':   'absolute'
        
});
        
        if(
opts.verticalAlign == 'bottom'){
          $(
image).css({'bottom':opts.bottomSpace,'top':'auto'});
        }
        if(
opts.horizontalAlign == 'right'){
          $(
image).css({'right':opts.rightSpace,'left':'auto'});
        }
      } else {
        $(
image).css({
          
'margin-top':     opts.topSpace,
          
'margin-right':   opts.rightSpace,
          
'margin-bottom':  opts.bottomSpace,
          
'margin-left':    opts.leftSpace,
          
'position':       opts.position
        
});
      }
    }
  }
  
  
Background = {
    
_setup_background: function(image){
      
$this = $(image);
      
$this.hide();
      
      
Background._configure_css(image);
      $(
window).load(function(){
        
_get_orig_data($this);
        
_size_image($this);
        
_center_image($this);
        
$this.show();
        $(
'.'+opts.loaderClass).hide();
        
opts.onImageShow.call(this);
        $(
window).resize(function(){
          
_size_image($this);
          
_center_image($this)
        });
      });
      
    },
    
_configure_css: function(image){
      
// If position is set to absolute (or if isBackground)
      
$(image).css({
        
'z-index':  opts.zIndex
      
});
      if(
opts.position == 'absolute') {
        $(
image).css({
          
'overflow':   'hidden',
          
'left':       opts.leftSpace,
          
'top':        opts.topSpace,
          
'position':   'absolute'
        
});
        
        $(
'html').css({'overflow-y':opts.overflow});
        
        if(
opts.verticalAlign == 'bottom'){
          $(
image).css({'bottom':opts.bottomSpace,'top':'auto'});
        }
        if(
opts.horizontalAlign == 'right'){
          $(
image).css({'right':opts.rightSpace});
        }
      } else {
        $(
image).css({
          
'margin-top':     opts.topSpace,
          
'margin-right':   opts.rightSpace,
          
'margin-bottom':  opts.bottomSpace,
          
'margin-left':    opts.leftSpace,
          
'position':       opts.position
        
});
      }
    }
  }
  
  
  
// SLIDESHOW FUNCTIONS
  
function _setup_slideshow (jQueryMatchedObj){
    
_build_slideshow_structure(jQueryMatchedObj);
    
    
opts.imageArray.length 0;

    if( 
jQueryMatchedObj.length == 1){
      
opts.imageArray.push(new Array(objClicked.getAttribute('src'),objClicked.getAttribute('title')));
    } else {  
      for ( var 
0jQueryMatchedObj.lengthi++ ) {
        
opts.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('src'),jQueryMatchedObj[i].getAttribute('title')));
        $(
jQueryMatchedObj[i]).attr('original',$(jQueryMatchedObj[i]).attr('src')).attr('src','');
      }
    }
        
_configure_css();
    
_loads_image(0);
  }
    
  function 
_build_slideshow_structure() {
    for ( var 
0jQueryMatchedObj.lengthi++ ) {
      $(
jQueryMatchedObj[i]).addClass('slides slide-'+i).after('<div class="slideTitle">'+$(jQueryMatchedObj[i]).attr('title')+'</div>');
    }
    $(
'.slideTitle').hide().css({
      
'padding':'10px',
      
'background':'#e0e0e0',
      
'position':'absolute',
      
'bottom':'0',
      
'right':'5%',
      
'opacity':'0.8'
    
});
  }
  
  
  function 
_loads_image(nums){
    var 
currentImage nums;
    
    var 
objImagePreloader = new Image();
    
objImagePreloader.onload = function() {
      $(
'.slide-'+currentImage).attr('src',opts.imageArray[currentImage][0]);
      
_get_orig_data($('.slide-'+currentImage));
      
_size_image($('.slide-'+currentImage));
      
_center_image($('.slide-'+currentImage));
            if(
currentImage==0opts.onImageShow.call(this);
      $(
window).resize(function(){
        
_size_image($('.slide-'+(currentImage)));
          
_center_image($('.slide-'+currentImage));
      });
      
      if(
currentImage==0){
        
_start_timer();
      }
      
      if(
currentImage opts.imageArray.length-1){
        
_loads_image(currentImage+1);
      }
      
    }
    
objImagePreloader.src opts.imageArray[currentImage][0];
  }
  
  function 
_start_timer() {
    var 
currentSlide 0;
    
    
// Hide the loading graphic
    
$('.'+opts.loaderClass).hide();
    
    
// Fade in first image
    
$('.slide-'+currentSlide).css({'z-index':opts.zIndex}).fadeIn();
    
    
// If user wants to show titles, use this option
    
if(opts.slideShowTitle){
      $(
'.slide-'+currentSlide).next('.slideTitle').css({'z-index':opts.zIndex+1}).fadeIn();
    }
    
    
// Start timer for slideshow
    
var slideInterval setInterval(function(){
      if(
currentSlide opts.imageArray.length-1){
        
currentSlide++;
        
lastSlide currentSlide-1;
      } else {
        
currentSlide=0;
        
lastSlide opts.imageArray.length-1;
      }
            
      $(
'.slide-'+lastSlide).css({'z-index':opts.zIndex-1}).fadeOut('slow');
      $(
'.slide-'+currentSlide).css({'z-index':opts.zIndex}).fadeIn('slow');
      if(
opts.slideShowTitle){
        
next_title(currentSlide,lastSlide);
      }
    }, (
to_i(opts.slideDelay)*1000));
  }
  
  function 
_configure_css(){
    for(
i=0;i<opts.imageArray.length;i++){
      
// Style the slide
      
if(opts.position == 'absolute') {
        $(
'.slide-'+i).css({
          
'position':   'absolute',
          
'overflow':   'hidden'
        
});
        
        $(
'html').css({'overflow-y':opts.overflow});
        
        if(
opts.verticalAlign == 'bottom'){
          $(
'.slide-'+i).css({'bottom':opts.bottomSpace});
        }else{
          $(
'.slide-'+i).css({'top':opts.topSpace});
                }
                
        if(
opts.horizontalAlign == 'right'){
          $(
'.slide-'+i).css({'right':opts.rightSpace});
        }else{
              $(
'.slide-'+i).css({'left':opts.leftSpace});
                }
      } else {
        $(
'.slide-'+i).css({
          
'margin-top':     opts.topSpace,
          
'margin-right':   opts.rightSpace,
          
'margin-bottom':  opts.bottomSpace,
          
'margin-left':    opts.leftSpace,
          
'position':       opts.position
        
});
      }
      
      
      
// Style the title
      
$('.slide-'+i).next('.slideTitle').css({
        
'position':'absolute',
        
'bottom':0,
        
'right':'5%'
      
});
    }
  }
  
  
  function 
next_title(currentSlide,lastSlide){
    $(
'.slide-'+lastSlide).next('.slideTitle').fadeOut();
    $(
'.slide-'+currentSlide).next('.slideTitle').fadeIn();
  }
  
  
  
// BROAD FUNCTIONS - FOR EACH SECTION
    
function _center_image(image){
        
$this image;
        
    if(
opts.horizontalAlign == 'center'){
        var 
pageWidth = $(window).width() - opts.horizontalOffset;
            var 
newWidth = -1*($this.width() - pageWidth)/2;
      $(
image).css({'left':newWidth});
    }
        
    if(
opts.verticalAlign == 'center'){
        var 
pageHeight = $(window).height() - opts.verticalOffset;
            var 
newHeight = -1*($this.height() - pageHeight)/2;
      $(
image).css({'top':newHeight});
    }
    }

  function 
_get_orig_data(image){
    
$this image;
       
    
$this.attr('origWidth'$this.width());
    
$this.attr('origHeight'$this.height());
    
$this.attr('ratio'find_ratio($this.width(),$this.height()));
  }
  
  function 
_size_image(image){
    
$this image;
    
    var 
originalWidth to_i($this.attr('origWidth'));
    var 
originalHeight to_i($this.attr('origHeight'));
    var 
ratio $this.attr('ratio');
    
      if(
originalWidth == || originalHeight == 0){
          
setTimeout(function(){
                
_get_orig_data(image);
                
_size_image(image);
            }, 
100);
          return;
      }
    
    var 
width_and_height = [];
    
width_and_height find_width_and_height(originalWidth,originalHeight,ratio);
    
    
$this.widthwidth_and_height[0] );
    
$this.heightwidth_and_height[1] );
    
    
_show_resize_message(originalWidth,originalHeight,image);
  }
  
  function 
_show_resize_message(originalWidth,originalHeight,image){
      if( (
to_i($this.width()) != originalWidth || to_i($this.height()) != originalHeight) && opts.resizeMsg.show){
      $(
".maximage_resized").remove();
      
      
// Replace [w] and [h] with their respective width or height
      
opts.resizeMsg.message opts.resizeMsg.message.replace('[w]',originalWidth).replace('[h]',originalHeight);
      
          var 
insertStr '<div class="maximage_resized">' opts.resizeMsg.message '</div>';
          if(
opts.resizeMsg.location.toLowerCase() == "before"){
              
$this.before(insertStr);
          } else {
              
$this.after(insertStr);
          }
      }
  }
  
  function 
find_width_and_height(originalWidth,originalHeight,ratio) {
    var 
pageWidth = $(window).width() - opts.horizontalOffset;
    var 
pageHeight = $(window).height() - opts.verticalOffset;
    
    if(!
opts.isBackground){
      if(
opts.maxFollows=='both'){
        
max_follows_width(pageWidth,ratio);
        
        if( 
height pageHeight ){
          
max_follows_height(pageHeight,ratio);
        }
      } else if (
opts.maxFollows == 'width'){
        
max_follows_width(pageWidth,ratio);
      } else if (
opts.maxFollows == 'height'){  
        
max_follows_height(pageHeight,ratio);
      }
    }else{
      
width pageWidth 40;
      
height width/ratio;
      
      if( 
height pageHeight ){
        
height pageHeight - (opts.topSpace opts.bottomSpace);
        
width height*ratio;
      }
    }
    
    
// If maxAtRatio == true and your new width is larger than originalWidth, size to originalWidth
    
if ( opts.maxAtOrigImageSize && width originalWidth){
      
arrayImageSize = new Array(originalWidth,originalHeight);
    }else{
      
arrayImageSize = new Array(width,height);
    }
    return 
arrayImageSize;
  }
  
  function 
max_follows_height(pageHeight,ratio){
    
height pageHeight - (opts.topSpace opts.bottomSpace);  // Page Height minus topSpace and bottomSpace
    
width height*ratio;
  }
  
  function 
max_follows_width(pageWidth,ratio){
    
width pageWidth - (opts.leftSpace opts.rightSpace); // Page Width minus leftSpace and rightSpace
    
height width/ratio;
  }
  
  function 
find_ratio(width,height) {
    
width to_i(width);
    
height to_i(height);
    var 
ratio width/height;
    
ratio ratio.toFixed(2);
    return 
ratio;
  }
  
  function 
to_i(i){
    
last parseInt(i);
    return 
last;
  }
  
  
// private function for debugging
  
function debug($obj) {
    if (
window.console && window.console.log) {
      
window.console.log($obj);
    }
  }
  
  return 
this.each(_initialize);
};


})(
jQuery);
?>
Онлайн: 0
Реклама