永发信息网

请高手帮忙写一段AS代码。

答案:2  悬赏:80  手机版
解决时间 2021-07-19 18:19

如下图,用人人餐厅举例。因为列表是超长的,只能显示3个,因此就要滑动。

当我按下左箭头后,人物会往左边移动,而且是逐渐加速的。但松开鼠标后,就有缓冲,慢慢停止。按右箭头只是方向相反。

还需要可以直接在那些图上拖拽。

急需一段AS3编写的代码。谢谢了。

最佳答案

定义一个类文件,然后在FLASH里面调用就可以了


package
{
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.SimpleButton;
import flash.text.TextField;
import flash.display.Sprite;
import flash.utils.getTimer;
import flash.geom.Rectangle;



public class ScrollBar extends Sprite {


//=============本类属性==============
////接口元件
private var scrollText : TextField;
private var scrollBar_sprite : Sprite;
private var up_btn : SimpleButton;
private var down_btn : SimpleButton;
private var pole_sprite : Sprite;
private var bg_sprite : Sprite;
////初始数据
private var poleStartHeight : Number;
private var poleStartY : Number;
private var totalPixels : Number;
private var isSelect : Boolean;
////上下滚动按钮按钮下时间
private var putTime : Number;


public function ScrollBar(scrollText_fc : TextField, scrollBarMc_fc : Sprite, height_fc : uint = 0,width_fc : uint = 0) {
//——————滚动条_sprite,滚动条按钮和滑块mc,被滚动的文本域初始化
scrollText = scrollText_fc;
scrollBar_sprite = scrollBarMc_fc;
up_btn = SimpleButton(scrollBar_sprite.getChildByName("up_btn"));
down_btn = SimpleButton(scrollBar_sprite.getChildByName("down_btn"));
pole_sprite = Sprite(scrollBar_sprite.getChildByName("pole_mc"));
bg_sprite = Sprite(scrollBar_sprite.getChildByName("bg_mc"));

//——————可用性控制
pole_sprite.visible = false;
up_btn.enabled = false;
down_btn.enabled = false;

//——————其他属性初始化
bg_sprite.useHandCursor = false;
isSelect = scrollText.selectable;
if(height_fc == 0) {
bg_sprite.height = scrollText.height;
}else {
bg_sprite.height = height_fc;
}
if(width_fc != 0) {
bg_sprite.width = width_fc+2;
pole_sprite.width=width_fc;
up_btn.width = up_btn.height = down_btn.width = down_btn .height = width_fc;
}
down_btn.y = bg_sprite.y + bg_sprite.height - down_btn.height - 1;
poleStartHeight = Math.floor(down_btn.y - up_btn.y - up_btn.height);
poleStartY = pole_sprite.y = Math.floor(up_btn.y + up_btn.height);

//——————注册侦听器
//文本滚动与鼠标滚轮
scrollText.addEventListener(Event.SCROLL, textScroll);
scrollText.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel);
//上滚动按钮
up_btn.addEventListener(MouseEvent.MOUSE_DOWN, upBtn);
up_btn.stage.addEventListener(MouseEvent.MOUSE_UP, upBtnUp);
//下滚动按钮
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.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 + 1;
}
}



private function downBtn(event : MouseEvent) : void {
scrollText.scrollV++;
pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1));
//当鼠标在按钮上按下的时间大于设定时间时,连续滚动
putTime = getTimer();
scrollBar_sprite.addEventListener(Event.ENTER_FRAME, downBtnDown);
}


private function downBtnDown(event : Event) : void {
if(getTimer() - putTime > 500) {
scrollText.scrollV++;
pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1));
}
}


private function downBtnUp(event : MouseEvent) : void {
scrollBar_sprite.removeEventListener(Event.ENTER_FRAME, downBtnDown);
}



private function upBtn(event : MouseEvent) : void {
scrollText.scrollV--;
pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1));
//当鼠标在按钮上按下的时间大于设定时间时,连续滚动
putTime = getTimer();
scrollBar_sprite.addEventListener(Event.ENTER_FRAME, upBtnDown);
}


private function upBtnDown(event : Event) : void {
if(getTimer() - putTime > 500) {
scrollText.scrollV--;
pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1));
}
}


private function upBtnUp(event : MouseEvent) : void {
scrollBar_sprite.removeEventListener(Event.ENTER_FRAME, upBtnDown);
}



private function mouseWheel(event : MouseEvent) : void {
if(isSelect == false) {
scrollText.scrollV -= Math.floor(event.delta / 2);
}else if(isSelect == true) {
event.delta = 1;
}
pole_sprite.y = Math.floor(poleStartY + totalPixels * (scrollText.scrollV - 1) / (scrollText.maxScrollV - 1));
}
}
}

全部回答
“ http://as66
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
冒险岛那个是最新的区
推荐一个最好的FLASH。
姓郭的女孩,9月3日出生叫什么?
各位观众 我有女人缘吗?
农历八月十六是什么星座的?
y=3/x ①3x+4y+b=0 ② 联立①②得 3x+12/x+b=
成都少管所2008年由哪个公司承建
那里有仙剑奇侠传这个游戏下载?完整的
大部分人是为了什么活着,金钱,名誉,亲人还
我在网上看见跟店里一摸一样的外套,价钱不店
制作火焰字的工具?
歌曲大小的问题
怎样把MSDN里面所有东西下载到我自己的电脑?
1到9,9个数字中用加减法,每个数字只能用一次,
我有一亲戚想卖菜又该咋进货呢,也在吴江这边
推荐资讯
谁能帮我查查河北网通的ADSL密码???急啊 ~
我的QQ里有很多QB 用不完 我想把QB换成钱
本人还没看《刺陵》。大家觉得怎样?
我怎么才能抓住你
怎么样可以找到初中同学和老乡啊?
某冶炼厂日产含碳3%的生铁200t, 该厂每天至少
说明尊重客观规律与发挥主观能动性的关系?
车辆保险迁回外地程序
我的战网通行证里有3个账号 要 开号怎么开啊
小宝宝打嗝怎么办?是什么原因?
哪个游戏比较好耍?
烤鳗鱼最大堆叠(一个框放的个数)是多少?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?