zoukankan      html  css  js  c++  java
  • 滚动条

    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;
    }
    //81行计算文本框移动后的新的y坐标,即原来的y坐标-文本框移动的垂直距离;82行也是计算文本框移动后的新的y坐标,只是为了有个动画效果,添加了一个滑动速度参数crollerpeed,如果不用这个速度参数,那么这行代码不需要写了,上一行已经得到文本框新的y坐标了。
  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/leon3286/p/1749134.html
Copyright © 2011-2022 走看看