import flash.events.MouseEvent; import flash.geom.Rectangle; var scrollerArea:ScrollerArea; var scroller:Scroller; var _content:Content;//文本内容 var _contentArea:ContentArea;//文本显示区域 var ratioContent:Number;//文本高度与显示区域高度之比 var rangeContent:Number;//文本可移动垂直范围 var rangeScroller:Number;//滚动条可移动垂直范围 var ratio:Number; var scrollerSpeed:Number;//0.00 to 1.00 var new_y:Number; var dragArea:Rectangle; scrolling(0.3); function scrolling(speed:Number):void { scrollerSpeed=speed; if (scrollerSpeed<0||scrollerSpeed>1) { scrollerSpeed=0.5; } scrollerArea=new ScrollerArea(); addChild(scrollerArea); scrollerArea.x=scrollerArea.y=260; scroller=new Scroller(); scroller.width=scrollerArea.width; addChild(scroller); scroller.x=scrollerArea.x; scroller.y=scrollerArea.y; _content=new Content(); addChild(_content); _contentArea=new ContentArea(); _contentArea.x=scrollerArea.x-_content.width; _contentArea.y=scrollerArea.y; _contentArea.height=scrollerArea.height; _content.x=_contentArea.x; _content.y=_contentArea.y; _content.mask=_contentArea; ratioContent=_contentArea.height/_content.height; scroller.height=scrollerArea.height*ratioContent; //设置滚动条长度根据文本长度(_content.height)动态调整 rangeContent=_content.height-_contentArea.height; rangeScroller=scrollerArea.height-scroller.height; ratio=rangeContent/rangeScroller; dragArea=new Rectangle(scrollerArea.x,scrollerArea.y,0,scrollerArea.height-scroller.height); if (_content.height<=_contentArea.height) { scroller.visible=scrollerArea.visible=false; } scroller.addEventListener(MouseEvent.MOUSE_DOWN,scrollerDrag); scroller.addEventListener(MouseEvent.MOUSE_UP,scrollerDrop); this.addEventListener(Event.ENTER_FRAME,onScroll); } function scrollerDrag(e:MouseEvent):void { e.currentTarget.startDrag(false,dragArea); stage.addEventListener(MouseEvent.MOUSE_UP,up); //此行代码是为了防止在单击滚动条拖拽后,鼠标移到其它位置松开鼠标时,仍然会执行拖拽效果(就是说:点击滚动条拖拽后,鼠标如果移到非滚动条区域,此时松开鼠标,再移动鼠标时不会再有文本滚动效果) } function scrollerDrop(e:MouseEvent):void { e.currentTarget.stopDrag(); stage.removeEventListener(MouseEvent.MOUSE_UP,up); } function up(e:MouseEvent):void { scroller.stopDrag(); } function onScroll( e:Event ):void { new_y=_contentArea.y+(scrollerArea.y-scroller.y)*ratio; _content.y += ( new_y - _content.y ) * scrollerSpeed; }<span style="color: #000000; font-size: 10pt;" mce_style="color: #000000; font-size: 10pt;"><br>//81行计算文本框移动后的新的y坐标,即原来的y坐标-文本框移动的垂直距离;82行也是计算文本框移动后的新的y坐标,只是为了有个动画效果,添加了一个滑动速度参数crollerpeed,如果不用这个速度参数,那么这行代码不需要写了,上一行已经得到文本框新的y坐标了。</span>