📄 carousel-beta-debug.js
字号:
* * @method addItems * @public * @param items {Array} An array of items to be added with each item * representing an item, index pair [{item, index}, ...] * @return {Boolean} Return true on success, false otherwise */ addItems: function (items) { var i, n, rv = true; if (!JS.isArray(items)) { return false; } for (i = 0, n = items.length; i < n; i++) { if (this.addItem(items[i][0], items[i][1]) === false) { rv = false; } } return rv; }, /** * Remove focus from the Carousel. * * @method blur * @public */ blur: function () { this._carouselEl.blur(); this.fireEvent(blurEvent); }, /** * Clears the items from Carousel. * * @method clearItems * public */ clearItems: function () { var n = this.get("numItems"); while (n > 0) { this.removeItem(0); n--; } }, /** * Set focus on the Carousel. * * @method focus * @public */ focus: function () { var selItem, numVisible, selectOnScroll, selected, first, last, isSelectionInvisible, focusEl, itemsTable; if (this._isAnimationInProgress) { // this messes up real bad! return; } selItem = this.get("selectedItem"); numVisible = this.get("numVisible"); selectOnScroll = this.get("selectOnScroll"); selected = this.getItem(selItem); first = this.get("firstVisible"); last = first + numVisible - 1; isSelectionInvisible = (selItem < first || selItem > last); focusEl = (selected && selected.id) ? Dom.get(selected.id) : null; itemsTable = this._itemsTable; if (!selectOnScroll && isSelectionInvisible) { focusEl = (itemsTable && itemsTable.items && itemsTable.items[first]) ? Dom.get(itemsTable.items[first].id) : null; } if (focusEl) { try { focusEl.focus(); } catch (ex) { // ignore focus errors } } this.fireEvent(focusEvent); }, /** * Hide the Carousel. * * @method hide * @public */ hide: function () { if (this.fireEvent(beforeHideEvent) !== false) { this.removeClass(this.CLASSES.VISIBLE); this.fireEvent(hideEvent); } }, /** * Initialize the Carousel. * * @method init * @public * @param el {HTMLElement | String} The html element that represents * the Carousel container. * @param attrs {Object} The set of configuration attributes for * creating the Carousel. */ init: function (el, attrs) { var elId = el, // save for a rainy day parse = false; if (!el) { YAHOO.log(el + " is neither an HTML element, nor a string", "error", WidgetName); return; } this._itemsTable = { loading: {}, numItems: 0, items: [], size: 0 }; YAHOO.log("Component initialization", WidgetName); if (JS.isString(el)) { el = Dom.get(el); } else if (!el.nodeName) { YAHOO.log(el + " is neither an HTML element, nor a string", "error", WidgetName); return; } if (el) { if (!el.id) { // in case the HTML element is passed el.setAttribute("id", Dom.generateId()); } this._parseCarousel(el); parse = true; } else { el = this._createCarousel(elId); } elId = el.id; Carousel.superclass.init.call(this, el, attrs); this.initEvents(); if (parse) { this._parseCarouselItems(); } if (!attrs || typeof attrs.isVertical == "undefined") { this.set("isVertical", false); } this._parseCarouselNavigation(el); this._navEl = this._setupCarouselNavigation(); instances[elId] = this; loadItems.call(this); }, /** * Initialize the configuration attributes used to create the Carousel. * * @method initAttributes * @public * @param attrs {Object} The set of configuration attributes for * creating the Carousel. */ initAttributes: function (attrs) { attrs = attrs || {}; Carousel.superclass.initAttributes.call(this, attrs); /** * @attribute currentPage * @description The current page number (read-only.) * @type Number */ this.setAttributeConfig("currentPage", { readOnly : true, value : 0 }); /** * @attribute firstVisible * @description The index to start the Carousel from (indexes begin * from zero) * @default 0 * @type Number */ this.setAttributeConfig("firstVisible", { method : this._setFirstVisible, validator : this._validateFirstVisible, value : attrs.firstVisible || this.CONFIG.FIRST_VISIBLE }); /** * @attribute selectOnScroll * @description Set this to true to automatically set focus to * follow scrolling in the Carousel. * @default true * @type Boolean */ this.setAttributeConfig("selectOnScroll", { validator : JS.isBoolean, value : attrs.selectOnScroll || true }); /** * @attribute numVisible * @description The number of visible items in the Carousel's * viewport. * @default 3 * @type Number */ this.setAttributeConfig("numVisible", { method : this._setNumVisible, validator : this._validateNumVisible, value : attrs.numVisible || this.CONFIG.NUM_VISIBLE }); /** * @attribute numItems * @description The number of items in the Carousel. * @type Number */ this.setAttributeConfig("numItems", { method : this._setNumItems, validator : this._validateNumItems, value : this._itemsTable.numItems }); /** * @attribute scrollIncrement * @description The number of items to scroll by for arrow keys. * @default 1 * @type Number */ this.setAttributeConfig("scrollIncrement", { validator : this._validateScrollIncrement, value : attrs.scrollIncrement || 1 }); /** * @attribute selectedItem * @description The index of the selected item. * @type Number */ this.setAttributeConfig("selectedItem", { method : this._setSelectedItem, validator : JS.isNumber, value : 0 }); /** * @attribute revealAmount * @description The percentage of the item to be revealed on each * side of the Carousel (before and after the first and last item * in the Carousel's viewport.) * @default 0 * @type Number */ this.setAttributeConfig("revealAmount", { method : this._setRevealAmount, validator : this._validateRevealAmount, value : attrs.revealAmount || 0 }); /** * @attribute isCircular * @description Set this to true to wrap scrolling of the contents * in the Carousel. * @default false * @type Boolean */ this.setAttributeConfig("isCircular", { validator : JS.isBoolean, value : attrs.isCircular || false }); /** * @attribute isVertical * @description True if the orientation of the Carousel is vertical * @default false * @type Boolean */ this.setAttributeConfig("isVertical", { method : this._setOrientation, validator : JS.isBoolean, value : attrs.isVertical || false }); /** * @attribute navigation * @description The set of navigation controls for Carousel * @default <br> * { prev: null, // the previous navigation element<br> * next: null } // the next navigation element * @type Object */ this.setAttributeConfig("navigation", { method : this._setNavigation, validator : this._validateNavigation, value : attrs.navigation || { prev: null, next: null, page: null } }); /** * @attribute animation * @description The optional animation attributes for the Carousel. * @default <br> * { speed: 0, // the animation speed (in seconds)<br> * effect: null } // the animation effect (like * YAHOO.util.Easing.easeOut) * @type Object */ this.setAttributeConfig("animation", { validator : this._validateAnimation, value : attrs.animation || { speed: 0, effect: null } }); /** * @attribute autoPlay * @description Set this to time in milli-seconds to have the * Carousel automatically scroll the contents. * @type Number */ this.setAttributeConfig("autoPlay", { validator : JS.isNumber, value : attrs.autoPlay || 0 }); }, /** * Initialize and bind the event handlers. * * @method initEvents * @public */ initEvents: function () { var cssClass = this.CLASSES; this.on("keydown", this._keyboardEventHandler); this.subscribe(afterScrollEvent, syncNavigation); this.on(afterScrollEvent, this.focus); this.subscribe(itemAddedEvent, syncUI); this.subscribe(itemAddedEvent, syncNavigation); this.subscribe(itemRemovedEvent, syncUI); this.subscribe(itemRemovedEvent, syncNavigation); this.on(itemSelectedEvent, this.focus); this.subscribe(loadItemsEvent, syncUI); this.subscribe(pageChangeEvent, this._syncPagerUI); this.subscribe(renderEvent, syncNavigation); this.subscribe(renderEvent, this._syncPagerUI); this.on("selectedItemChange", function (ev) { setItemSelection.call(this, ev.newValue, ev.prevValue); this._updateTabIndex(this.getElementForItem(ev.newValue)); this.fireEvent(itemSelectedEvent, ev.newValue); }); this.on("firstVisibleChange", function (ev) { if (!this.get("selectOnScroll")) { this._updateTabIndex(this.getElementForItem(ev.newValue)); } }); // Handle item selection on mouse click this.on("click", this._itemClickHandler); // Handle page navigation this.on("click", this._pagerClickHandler); // Restore the focus on the navigation buttons Event.onFocus(this.get("element"), function (ev, obj) { obj._updateNavButtons(Event.getTarget(ev), true); }, this); Event.onBlur(this.get("element"), function (ev, obj) { obj._updateNavButtons(Event.getTarget(ev), false); }, this); }, /** * Return the ITEM_TAG_NAME at index or null if the index is not found.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -