スライドするページナビをつくろう
海賊王をめざす男 マツです。こんにちは。
用途によって、ページ機能をいろいろつくったりします。今回はスライド式。
特徴
・ボタン長押しでページボタン群をスライド。
・表示エリア内をスライド制限。
【ダウンロード】
Tweener を別途ダウンロードしてください。
あんまり操作ボタンを増やしても混乱をまねくので、用途によってナビゲーションを実装するようにしています。
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#ffffff" applicationComplete="init();"> <mx:Script> <![CDATA[ import caurina.transitions.Tweener; private var movePx:Number = 50; private var plusminus:Number; private var pageRepeaterWidth:Number; private function init():void { var _targetObj:Object = pageRepeater; _targetObj.dataProvider = TEST_ARYC; // 初期化 Tweener.removeTweens( pageRepeater.container ); pageRepeater.container.horizontalScrollPosition = 0; } private function pageButtonInitializeHandler(evt:Event):void { pageRepeaterWidth = 0; prevPageButton.visible = false; nextPageButton.visible = false; } private function pageButtonCreationCompleteHandler(evt:Event):void { var _targetObj:Object = evt.currentTarget; var _targetObjX:Number = _targetObj.x + _targetObj.width; if ( _targetObjX != 0 && _targetObjX > pageRepeaterWidth ) { pageRepeaterWidth = _targetObjX; } if ( pageRepeaterWidth > _targetObj.owner.container.width ) { prevPageButton.visible = true; nextPageButton.visible = true; } } private function pageButtonClickHandler(evt:Event):void { } private function prevPageButtonMouseDown(evt:Event):void { var _targetObj:Object = pageRepeater.container; plusminus = -1; var _slideObj:Object = evt.currentTarget; _slideObj.addEventListener(Event.ENTER_FRAME, slideEnterFrame); } private function nextPageButtonMouseDown(evt:Event):void { var _targetObj:Object = pageRepeater.container; plusminus = 1; var _slideObj:Object = evt.currentTarget; _slideObj.addEventListener(Event.ENTER_FRAME, slideEnterFrame); } private function slideEnterFrame(evt:Event):void { var _targetObj:Object = pageRepeater.container; var position:Number = _targetObj.horizontalScrollPosition + (plusminus * movePx); Tweener.addTween( _targetObj, { horizontalScrollPosition:position, time:2 } ); } private function slideEnterFrameClear(evt:MouseEvent):void { var _slideObj:Object = evt.currentTarget; _slideObj.removeEventListener(Event.ENTER_FRAME, slideEnterFrame); } ]]> </mx:Script> <mx:Style> Button { background-color: #ffffff; } </mx:Style> <mx:ArrayCollection id="TEST_ARYC"> <mx:Object> <mx:id>0</mx:id> <mx:name>テスト</mx:name> <mx:page>1</mx:page> </mx:Object> <mx:Object> <mx:id>1</mx:id> <mx:name>テスト</mx:name> <mx:page>2</mx:page> </mx:Object> <mx:Object> <mx:id>2</mx:id> <mx:name>テスト</mx:name> <mx:page>3</mx:page> </mx:Object> <mx:Object> <mx:id>3</mx:id> <mx:name>テスト</mx:name> <mx:page>4</mx:page> </mx:Object> <mx:Object> <mx:id>4</mx:id> <mx:name>テスト</mx:name> <mx:page>5</mx:page> </mx:Object> <mx:Object> <mx:id>5</mx:id> <mx:name>テスト</mx:name> <mx:page>6</mx:page> </mx:Object> <mx:Object> <mx:id>6</mx:id> <mx:name>テスト</mx:name> <mx:page>7</mx:page> </mx:Object> <mx:Object> <mx:id>7</mx:id> <mx:name>テスト</mx:name> <mx:page>8</mx:page> </mx:Object> <mx:Object> <mx:id>8</mx:id> <mx:name>テスト</mx:name> <mx:page>9</mx:page> </mx:Object> <mx:Object> <mx:id>9</mx:id> <mx:name>テスト</mx:name> <mx:page>10</mx:page> </mx:Object> <mx:Object> <mx:id>10</mx:id> <mx:name>テスト</mx:name> <mx:page>11</mx:page> </mx:Object> <mx:Object> <mx:id>11</mx:id> <mx:name>テスト</mx:name> <mx:page>12</mx:page> </mx:Object> <mx:Object> <mx:id>12</mx:id> <mx:name>テスト</mx:name> <mx:page>13</mx:page> </mx:Object> <mx:Object> <mx:id>13</mx:id> <mx:name>テスト</mx:name> <mx:page>14</mx:page> </mx:Object> <mx:Object> <mx:id>14</mx:id> <mx:name>テスト</mx:name> <mx:page>15</mx:page> </mx:Object> <mx:Object> <mx:id>15</mx:id> <mx:name>テスト</mx:name> <mx:page>16</mx:page> </mx:Object> <mx:Object> <mx:id>16</mx:id> <mx:name>テスト</mx:name> <mx:page>17</mx:page> </mx:Object> <mx:Object> <mx:id>17</mx:id> <mx:name>テスト</mx:name> <mx:page>18</mx:page> </mx:Object> <mx:Object> <mx:id>18</mx:id> <mx:name>テスト</mx:name> <mx:page>19</mx:page> </mx:Object> <mx:Object> <mx:id>19</mx:id> <mx:name>テスト</mx:name> <mx:page>20</mx:page> </mx:Object> </mx:ArrayCollection> <mx:HBox id="pageHBox" width="700" height="50" x="250" y="100"> <mx:Button id="prevPageButton" label="←" width="35" height="35" mouseDown="prevPageButtonMouseDown(event);" mouseUp="slideEnterFrameClear(event);"/> <mx:HBox width="200" height="50" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Repeater id="pageRepeater"> <mx:Button id="pageButton" width="20" height="18" paddingTop="2" paddingRight="0" paddingBottom="0" paddingLeft="0" buttonMode="true" textAlign="center" fontSize="8" label="{pageRepeater.currentItem.page}" initialize="pageButtonInitializeHandler(event);" creationComplete="pageButtonCreationCompleteHandler(event);" click="pageButtonClickHandler(event);" /> </mx:Repeater> </mx:HBox> <mx:Button id="nextPageButton" label="→" width="35" height="35" mouseDown="nextPageButtonMouseDown(event);" mouseUp="slideEnterFrameClear(event);"/> </mx:HBox> </mx:Application>