滚动条

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坐标了。

转载于:https://www.cnblogs.com/leon3286/archive/2010/06/01/1749134.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值