From 39d582d762ba84586df79067fbb3daa594f7636d Mon Sep 17 00:00:00 2001 From: JinweiClarkChao Date: Mon, 24 Feb 2014 21:26:36 +0800 Subject: UUcky.me --- .../jquery.swatchbook.js" | 249 +++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 "uucky.me/Uucky\347\232\204\345\260\217\347\253\231_files/jquery.swatchbook.js" (limited to 'uucky.me/Uucky的小站_files/jquery.swatchbook.js') diff --git "a/uucky.me/Uucky\347\232\204\345\260\217\347\253\231_files/jquery.swatchbook.js" "b/uucky.me/Uucky\347\232\204\345\260\217\347\253\231_files/jquery.swatchbook.js" new file mode 100644 index 0000000..294b3f4 --- /dev/null +++ "b/uucky.me/Uucky\347\232\204\345\260\217\347\253\231_files/jquery.swatchbook.js" @@ -0,0 +1,249 @@ +/** + * jquery.swatchbook.js v1.1.0 + * http://www.codrops.com + * + * Licensed under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2012, Codrops + * http://www.codrops.com + */ + +;( function( $, window, undefined ) { + + 'use strict'; + + // global + var Modernizr = window.Modernizr; + + jQuery.fn.reverse = [].reverse; + + $.SwatchBook = function( options, element ) { + + this.$el = $( element ); + this._init( options ); + + }; + + $.SwatchBook.defaults = { + // index of initial centered item + center : 6, + // number of degrees that is between each item + angleInc : 8, + speed : 700, + easing : 'ease', + // amount in degrees for the opened item's next sibling + proximity : 45, + // amount in degrees between the opened item's next siblings + neighbor : 4, + // animate on load + onLoadAnim : true, + // if it should be closed by default + initclosed : false, + // index of the element that when clicked, triggers the open/close function + // by default there is no such element + closeIdx : -1, + // open one specific item initially (overrides initclosed) + openAt : -1 + }; + + $.SwatchBook.prototype = { + + _init : function( options ) { + + this.options = $.extend( true, {}, $.SwatchBook.defaults, options ); + + this.$items = this.$el.children( 'div' ); + this.itemsCount = this.$items.length; + this.current = -1; + this.support = Modernizr.csstransitions; + this.cache = []; + + if( this.options.onLoadAnim ) { + this._setTransition(); + } + + if( !this.options.initclosed ) { + this._center( this.options.center, this.options.onLoadAnim ); + } + else { + + this.isClosed = true; + if( !this.options.onLoadAnim ) { + this._setTransition(); + } + + } + + if( this.options.openAt >= 0 && this.options.openAt < this.itemsCount ) { + this._openItem( this.$items.eq( this.options.openAt ) ); + } + + this._initEvents(); + + }, + _setTransition : function() { + + if( this.support ) { + this.$items.css( { 'transition': 'all ' + this.options.speed + 'ms ' + this.options.easing } ); + } + + }, + _openclose : function() { + + this.isClosed ? this._center( this.options.center, true ) : this.$items.css( { 'transform' : 'rotate(0deg)' } ); + this.isClosed = !this.isClosed; + + }, + _center : function( idx, anim ) { + + var self = this; + + this.$items.each( function( i ) { + + var transformStr = 'rotate(' + ( self.options.angleInc * ( i - idx ) ) + 'deg)'; + $( this ).css( { 'transform' : transformStr } ); + + } ); + + }, + _openItem : function( $item ) { + + var itmIdx = $item.index(); + + if( itmIdx !== this.current ) { + + if( this.options.closeIdx !== -1 && itmIdx === this.options.closeIdx ) { + + this._openclose(); + this._setCurrent(); + + } + else { + + this._setCurrent( $item ); + $item.css( { 'transform' : 'rotate(0deg)' } ); + this._rotateSiblings( $item ); + + } + + } + + }, + _initEvents : function() { + + var self = this; + + this.$items.on( 'click.swatchbook', function( event ) { + self._openItem( $( this ) ); + } ); + + }, + _rotateSiblings : function( $item ) { + + var self = this, + idx = $item.index(), + $cached = this.cache[ idx ], + $siblings; + + if( $cached ) { + $siblings = $cached; + } + else { + + $siblings = $item.siblings(); + this.cache[ idx ] = $siblings; + + } + + $siblings.each( function( i ) { + + var rotateVal = i < idx ? + self.options.angleInc * ( i - idx ) : + i - idx === 1 ? + self.options.proximity : + self.options.proximity + ( i - idx - 1 ) * self.options.neighbor; + + var transformStr = 'rotate(' + rotateVal + 'deg)'; + + $( this ).css( { 'transform' : transformStr } ); + + } ); + + }, + _setCurrent : function( $el ) { + + this.current = $el ? $el.index() : -1; + this.$items.removeClass( 'ff-active' ); + if( $el ) { + $el.addClass( 'ff-active' ); + } + + } + + }; + + var logError = function( message ) { + + if ( window.console ) { + + window.console.error( message ); + + } + + }; + + $.fn.swatchbook = function( options ) { + + var instance = $.data( this, 'swatchbook' ); + + if ( typeof options === 'string' ) { + + var args = Array.prototype.slice.call( arguments, 1 ); + + this.each(function() { + + if ( !instance ) { + + logError( "cannot call methods on swatchbook prior to initialization; " + + "attempted to call method '" + options + "'" ); + return; + + } + + if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) { + + logError( "no such method '" + options + "' for swatchbook instance" ); + return; + + } + + instance[ options ].apply( instance, args ); + + }); + + } + else { + + this.each(function() { + + if ( instance ) { + + instance._init(); + + } + else { + + instance = $.data( this, 'swatchbook', new $.SwatchBook( options, this ) ); + + } + + }); + + } + + return instance; + + }; + +} )( jQuery, window ); \ No newline at end of file -- cgit v1.2.3