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坐标了。
  • 相关阅读:
    [NOI2012] 美食节
    [NOI2008] 志愿者招募
    P3834 【模板】可持久化线段树 2(主席树)
    P3919 【模板】可持久化线段树 1(可持久化数组)
    P4168 [Violet]蒲公英
    轻重链剖分
    沉舟侧畔千帆过 病树前头万木春
    P2119 魔法阵 (0.1s 虐杀过程)
    两行虐杀儒略历
    CSP2020 S-2 爆零(日)记 (已完结)
  • 原文地址:https://www.cnblogs.com/leon3286/p/1749134.html
Copyright © 2011-2022 走看看