/ Published in: MXML
Expand |
Embed | Plain Text
<?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalGap="0"> <mx:Script> <![CDATA[ import mx.effects.Move; import events.*; import mx.controls.Alert; private var _selectedBtn:Button = null; private var _selectedIndex:int = 0; private var _itemsPerPage:int = 0; private var _totalItems:int = 0; private var _pages:int = 0; private var _visiblePages:int = 0; private var _dataProvider:Array = []; private var pageMove:Move = new Move(); public function get selectedIndex():int { return _selectedIndex; } public function set selectedIndex(value:int):void { pageMove.target = pageHolder; var index:int = 0; var btn:Button = null; value = Math.max(0, value); if (this.initialized) { if (pageHolder.numChildren > 0) { btn = pageHolder.getChildAt(value) as Button; if (_selectedBtn != null) { _selectedBtn.selected = false; } _selectedBtn = btn; _selectedBtn.selected = true; } index = Math.round(visiblePages / 2); if (value < (index - 1)) { movePage(0); } else if (value > _dataProvider.length - index) { movePage((-(_dataProvider.length - visiblePages)) * 45); } else { movePage(-Math.round((value + 1) * 45) + index * 45); } prevBtn.enabled = firstBtn.enabled = value == 0 || pageHolder.numChildren == 0 ? (false) : (true); nextBtn.enabled = lastBtn.enabled = value == (_dataProvider.length - 1) ? (false) : (true); } _selectedIndex = value; var event:PaginatorEvent = new PaginatorEvent(PaginatorEvent.PAGE_CHANGE); event.page = _selectedIndex; dispatchEvent(event); } public function get selectedBtn():Button { return _selectedBtn; } public function set selectedBtn(value:Button):void { _selectedBtn = value; } public function get itemsPerPage():int { return _itemsPerPage; } public function set itemsPerPage(value:int):void { _itemsPerPage = value; if(_totalItems > 0 && _itemsPerPage > 0) update(); } public function get pages():int { return _pages; } public function set pages(value:int):void { _pages = value; } public function get visiblePages():int { return _visiblePages; } public function set visiblePages(value:int):void { _visiblePages = value; } public function get totalItems():int { return _totalItems; } public function set totalItems(value:int):void { _totalItems = value; if(_itemsPerPage > 0) update(); } public function get dataProvider():Array { return _dataProvider; } public function set dataProvider(value:Array):void { _dataProvider = value; } private function update():void { var totalPages:int = 0; pages = Math.ceil(totalItems / itemsPerPage); if (_dataProvider.length < _pages) { totalPages = _dataProvider.length; while (totalPages < _pages) { _dataProvider.push(totalPages); var btn:Button = new Button(); btn.width = 45; btn.label = String((totalPages + 1)) as String; btn.data = totalPages; btn.addEventListener(MouseEvent.CLICK, pageClickHandler); btn.setStyle("paddingLeft", 0); btn.setStyle("paddingRight", 0); btn.setStyle("cornerRadius", 10); pageHolder.addChildAt(btn, totalPages); totalPages++; } pageCan.width = 45 * _visiblePages; } else if (_dataProvider.length > _pages) { totalPages = _dataProvider.length - 1; while (totalPages >= _pages) { _dataProvider.splice(totalPages); btn = Button(pageHolder.removeChildAt(totalPages)) as Button; btn.removeEventListener(MouseEvent.CLICK, pageClickHandler); btn.width = 0; totalPages = totalPages - 1; } } selectedIndex = Math.min(selectedIndex, (_dataProvider.length - 1)); var event:PaginatorEvent = new PaginatorEvent(PaginatorEvent.PAGE_CHANGE); event.page = _selectedIndex; dispatchEvent(event); } private function pageClickHandler(vEvent:MouseEvent):void { var btn:Button = vEvent.currentTarget as Button; selectedIndex = btn.data as int; } private function movePage(newPos:int) : void { var currentPos:Number = -(pageHolder.width - visiblePages * 45); if (newPos < currentPos) { newPos = currentPos; } newPos = Math.min(0, newPos); pageMove.end(); pageMove.xTo = newPos; pageMove.play(); } private function onNPClick(vEvent:MouseEvent):void { switch(vEvent.target) { case prevBtn: { if (selectedIndex > 0) { var prevIndex:int = selectedIndex - 1; selectedIndex = prevIndex; } break; } case nextBtn: { if (selectedIndex < (_dataProvider.length - 1)) { var nextIndex:int = selectedIndex + 1; selectedIndex = nextIndex; } break; } case firstBtn: { selectedIndex = 0; break; } case lastBtn: { selectedIndex = _dataProvider.length - 1; break; } default: { break; } } } ]]> </mx:Script> <mx:Button id="firstBtn" label="<<" click="onNPClick(event)"/> <mx:Button id="prevBtn" label="<" click="onNPClick(event)"/> <mx:Canvas width="100%" horizontalScrollPolicy="off" id="pageCan"> <mx:HBox horizontalGap="0" horizontalScrollPolicy="off" id="pageHolder"/> </mx:Canvas> <mx:Button id="nextBtn" label=">" click="onNPClick(event)"/> <mx:Button id="lastBtn" label=">>" click="onNPClick(event)"/> </mx:HBox>
You need to login to post a comment.
