⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui.tabs.js

📁 使用JSP和Java Bean来构建一个网上书店。本章介绍的例子可以分成两大部分
💻 JS
📖 第 1 页 / 共 2 页
字号:
			// Prevent IE from keeping other link focussed when using the back button			// and remove dotted border from clicked link. This is controlled in modern			// browsers via CSS, also blur removes focus from address bar in Firefox			// which can become a usability and annoying problem with tabsRotate.			if ($.browser.msie)				this.blur();			//return o.bookmarkable && !!trueClick; // convert trueClick == undefined to Boolean required in IE			return false;		});		// disable click if event is configured to something else		if (!(/^click/).test(o.event))			this.$tabs.bind('click.tabs', function() { return false; });	},	add: function(url, label, index) {		if (index == undefined) 			index = this.$tabs.length; // append by default		var o = this.options;		var $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label));		$li.data('destroy.tabs', true);		var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId( $('a:first-child', $li)[0] );		// try to find an existing element before creating a new one		var $panel = $('#' + id);		if (!$panel.length) {			$panel = $(o.panelTemplate).attr('id', id)				.addClass(o.hideClass)				.data('destroy.tabs', true);		}		$panel.addClass(o.panelClass);		if (index >= this.$lis.length) {			$li.appendTo(this.element);			$panel.appendTo(this.element[0].parentNode);		} else {			$li.insertBefore(this.$lis[index]);			$panel.insertBefore(this.$panels[index]);		}				o.disabled = $.map(o.disabled,			function(n, i) { return n >= index ? ++n : n });					this.tabify();		if (this.$tabs.length == 1) {			$li.addClass(o.selectedClass);			$panel.removeClass(o.hideClass);			var href = $.data(this.$tabs[0], 'load.tabs');			if (href)				this.load(index, href);		}		// callback		this.element.triggerHandler('tabsadd',			[null, this.ui(this.$tabs[index], this.$panels[index])], o.add		);	},	remove: function(index) {		var o = this.options, $li = this.$lis.eq(index).remove(),			$panel = this.$panels.eq(index).remove();		// If selected tab was removed focus tab to the right or		// in case the last tab was removed the tab to the left.		if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1)			this.select(index + (index + 1 < this.$tabs.length ? 1 : -1));		o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }),			function(n, i) { return n >= index ? --n : n });		this.tabify();		// callback		this.element.triggerHandler('tabsremove',			[null, this.ui($li.find('a')[0], $panel[0])], o.remove		);	},	enable: function(index) {		var o = this.options;		if ($.inArray(index, o.disabled) == -1)			return;					var $li = this.$lis.eq(index).removeClass(o.disabledClass);		if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2...			$li.css('display', 'inline-block');			setTimeout(function() {				$li.css('display', 'block');			}, 0);		}		o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });		// callback		this.element.triggerHandler('tabsenable',			[null, this.ui(this.$tabs[index], this.$panels[index])], o.enable		);	},	disable: function(index) {		var self = this, o = this.options;		if (index != o.selected) { // cannot disable already selected tab			this.$lis.eq(index).addClass(o.disabledClass);			o.disabled.push(index);			o.disabled.sort();			// callback			this.element.triggerHandler('tabsdisable',				[null, this.ui(this.$tabs[index], this.$panels[index])], o.disable			);		}	},	select: function(index) {		if (typeof index == 'string')			index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] );		this.$tabs.eq(index).trigger(this.options.event);	},	load: function(index, callback) { // callback is for internal usage only				var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0],				bypassCache = callback == undefined || callback === false, url = $a.data('load.tabs');		callback = callback || function() {};				// no remote or from cache - just finish with callback		if (!url || !bypassCache && $.data(a, 'cache.tabs')) {			callback();			return;		}		// load remote from here on				var inner = function(parent) {			var $parent = $(parent), $inner = $parent.find('*:last');			return $inner.length && $inner || $parent;		};		var cleanup = function() {			self.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass)						.each(function() {							if (o.spinner)								inner(this).parent().html(inner(this).data('label.tabs'));						});			self.xhr = null;		};				if (o.spinner) {			var label = inner(a).html();			inner(a).wrapInner('<em></em>')				.find('em').data('label.tabs', label).html(o.spinner);		}		var ajaxOptions = $.extend({}, o.ajaxOptions, {			url: url,			success: function(r, s) {				$(a.hash).html(r);				cleanup();								if (o.cache)					$.data(a, 'cache.tabs', true); // if loaded once do not load them again				// callbacks				$(self.element).triggerHandler('tabsload',					[null, self.ui(self.$tabs[index], self.$panels[index])], o.load				);				o.ajaxOptions.success && o.ajaxOptions.success(r, s);								// This callback is required because the switch has to take				// place after loading has completed. Call last in order to 				// fire load before show callback...				callback();			}		});		if (this.xhr) {			// terminate pending requests from other tabs and restore tab label			this.xhr.abort();			cleanup();		}		$a.addClass(o.loadingClass);		setTimeout(function() { // timeout is again required in IE, "wait" for id being restored			self.xhr = $.ajax(ajaxOptions);		}, 0);	},	url: function(index, url) {		this.$tabs.eq(index).removeData('cache.tabs').data('load.tabs', url);	},	destroy: function() {		var o = this.options;		this.element.unbind('.tabs')			.removeClass(o.navClass).removeData('tabs');		this.$tabs.each(function() {			var href = $.data(this, 'href.tabs');			if (href)				this.href = href;			var $this = $(this).unbind('.tabs');			$.each(['href', 'load', 'cache'], function(i, prefix) {				$this.removeData(prefix + '.tabs');			});		});		this.$lis.add(this.$panels).each(function() {			if ($.data(this, 'destroy.tabs'))				$(this).remove();			else				$(this).removeClass([o.selectedClass, o.unselectClass,					o.disabledClass, o.panelClass, o.hideClass].join(' '));		});	}});$.ui.tabs.defaults = {	// basic setup	unselect: false,	event: 'click',	disabled: [],	cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }	// TODO history: false,	// Ajax	spinner: 'Loading&#8230;',	cache: false,	idPrefix: 'ui-tabs-',	ajaxOptions: {},	// animations	fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }	// templates	tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',	panelTemplate: '<div></div>',	// CSS classes	navClass: 'ui-tabs-nav',	selectedClass: 'ui-tabs-selected',	unselectClass: 'ui-tabs-unselect',	disabledClass: 'ui-tabs-disabled',	panelClass: 'ui-tabs-panel',	hideClass: 'ui-tabs-hide',	loadingClass: 'ui-tabs-loading'};$.ui.tabs.getter = "length";/* * Tabs Extensions *//* * Rotate */$.extend($.ui.tabs.prototype, {	rotation: null,	rotate: function(ms, continuing) {				continuing = continuing || false;				var self = this, t = this.options.selected;				function start() {			self.rotation = setInterval(function() {				t = ++t < self.$tabs.length ? t : 0;				self.select(t);			}, ms); 		}				function stop(e) {			if (!e || e.clientX) { // only in case of a true click				clearInterval(self.rotation);			}		}				// start interval		if (ms) {			start();			if (!continuing)				this.$tabs.bind(this.options.event, stop);			else				this.$tabs.bind(this.options.event, function() {					stop();					t = self.options.selected;					start();				});		}		// stop interval		else {			stop();			this.$tabs.unbind(this.options.event, stop);		}	}});})(jQuery);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -