AS3实现动态文本滚动条
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-07
按钮 down_btn.addEventListener(MouseEvent.MOUSE_DOWN, downBtn); down_btn.stage.addEventListener(MouseEvent.MOUSE_UP, downBtnUp); //滑块 pole_sprite.addEventListener(MouseEvent.MOUSE_DOWN, poleSprite); pole_sprite.stage.addEventListener(MouseEvent.MOUSE_UP, poleUp); //滑块背景点击 bg_sprite.addEventListener(MouseEvent.MOUSE_DOWN, bgDown); } /** * 文本滚动事件 */ private function textScroll(event : Event) : void { //判断滑块儿是否显示,并根据文本内容多少定义滑块高度 if(scrollText.maxScrollV != 1) { pole_sprite.visible = true; up_btn.enabled = true; down_btn.enabled = true; //定义一个高度因子,此因子随加载文本的增多,将无限趋向于1 var heightVar : Number = 1 - (scrollText.maxScrollV - 1) / scrollText.maxScrollV; //根据高度因子初始化滑块的高度 pole_sprite.height = Math.floor(poleStartHeight * Math.pow(heightVar, 1 / 3)); totalPixels = Math.floor(down_btn.y - up_btn.y - up_btn.height - pole_sprite.height); pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1)); }else { pole_sprite.visible = false; up_btn.enabled = false; down_btn.enabled = false; } } /** * 滑块滚动 */ private function poleSprite(event : MouseEvent) : void { //首先取消文本框滚动侦听,因为文本滚动的时候会设置滑块的位置,而此时是通过滑块调整文本的位置,所以会产生冲突 scrollText.removeEventListener(Event.SCROLL, textScroll); //监听舞台,这样可以保证拖动滑竿的时候,鼠标在舞台的任意位置松手,都会停止拖动 scrollBar_sprite.stage.addEventListener(MouseEvent.MOUSE_UP, poleUp); //限定拖动范围 var dragRect : Rectangle = new Rectangle(pole_sprite.x, poleStartY, 0, totalPixels); pole_sprite.startDrag(false, dragRect); scrollBar_sprite.addEventListener(Event.ENTER_FRAME, poleDown); } private function poleDown(event : Event) : void { //在滚动过程中及时获得滑块所处位置 var nowPosition : Number = Math.floor(pole_sprite.y); //使文本随滚动条滚动,这里为什么要加1,可见scroll属性值应该是取正的,也就是说它会删除小数部分,而非采用四舍五入制? scrollText.scrollV = (scrollText.maxScrollV - 1) * (nowPosition - poleStartY) / totalPixels + 2; //误差校正 var unitPixels : Number = totalPixels / (scrollText.maxScrollV - 1); if((nowPosition - poleStartY) < unitPixels) { scrollText.scrollV = (scrollText.maxScrollV - 1) * (nowPosition - poleStartY) / totalPixels; } } private function poleUp(event : MouseEvent) : void { pole_sprite.stopDrag(); scrollBar_sprite.removeEventListener(Event.ENTER_FRAME, poleDown); scrollBar_sprite.stage.removeEventListener(MouseEvent.MOUSE_UP, poleUp); scrollText.addEventListener(Event.SCROLL, textScroll); } /** * 滑块背景点击 */ private function bgDown(event : MouseEvent) : void { var nowPosition : Number; if((scrollBar_sprite.mouseY - up_btn.y) < (pole_sprite.height / 2)) { nowPosition = Math.floor(up_btn.y + up_btn.height); }else if((down_btn.y - scrollBar_sprite.mouseY) < pole_sprite.height / 2) { nowPosition = Math.floor(down_btn.y - pole_sprite.height); }else { nowPosition = scrollBar_sprite.mouseY - pole_sprite.height / 2; } pole_sprite.y = nowPosition; scrollText.scrollV = (scrollText.max |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于AS3实现动态文本滚动条的所有评论