看着JE人气很火, 忍不住也想出来露露脸了``这人就喜欢凑热闹~
前两天应聘实习的时候(偶还小, 还在校, 什么都不懂), 被要求做一个效果, 需要做两个版本, 现在说明一下Flex这个版本, 效果就是下面有一个滑动条, 拖动条的时候, 上面的图片就跟着动了,
既然都用点到要用FLEX了, 当然很直接的就想到HSlider组件`
这样就产生了思路一:使用Slider组件进行数值绑定, 使上面的东西坐标变化.
进而就得改变Slider的样式, 在网上搜了好久, 发现这样可以改样式:
做个宣传, 不知道哪位牛哥的JE.
http://wangcheng.iteye.com/blog/78689
看那个地址就知道怎么改样式了, 毕竟自己不是美工, 改出来的样式实在难看, 自己都不好意思拿出手, 但想想还是算了,
但是后来发现, 在运行的时候, click事件和onChange事件会有冲突, 按运行效果来看, 应该是onChange事件包含了click事件, 现在都得把这两个事件得分开, 弄得很头疼``不知道哪儿没弄好.
最后忍不住, 还是自己写个Slider吧,
使用的算法都是在javascript里比较常见的, 只是改在AS3下而已.
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="{componentsHeight+bg.y}" cornerRadius="4"
creationComplete="init()">
<mx:Canvas width="{bgWidth}" height="{bgHeight}" horizontalScrollPolicy="off">
<mx:Image source="assets/images/tp_bg.png" x="0" y="0" />
<mx:HBox id="slider" width="0" height="100%"
verticalAlign="middle" horizontalGap="4"
horizontalScrollPolicy="off">
</mx:HBox>
</mx:Canvas>
<mx:Canvas id="bg" width="100%" height="{componentsHeight}" x="0"
cornerRadius="4" backgroundColor="#EEEEEE" backgroundAlpha="0.7" y="198">
<mx:Button id="bar" width="80" height="{componentsHeight}"
fillAlphas="[1.0, 1.0, 1.0, 1.0]"
fillColors="[#F8B566, #FF9517, #F8B566, #FF9517]"
cornerRadius="4" themeColor="#E77F05" x="0"/>
</mx:Canvas>
<mx:HTTPService id="xmlService" url="{url}" result="resultHandler(event)" />
<mx:Script>
<![CDATA[
import mx.utils.ArrayUtil;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.controls.Image;
import mx.collections.XMLListCollection;
import flash.utils.clearTimeout;
import flash.utils.setTimeout;
import mx.core.UIComponent;
import mx.controls.Alert;
[Bindable]
public var componentsHeight:Number;
public var flag:Boolean = false;
public var moving:Boolean = false;
public var timer:Timer;
public var speed:Number = 4;
public var _bgWidth:Number;
public var _bgHeight:Number;
[Bindable]
public var url:String;
public var imgModel:ArrayCollection = new ArrayCollection();
private var moveInt:uint;
private var point:Point;
private var offset:Point;
private var percent:Number;
private var _target:UIComponent;
public function get target():UIComponent {
return _target;
}
public function set target(_target:UIComponent):void {
this._target = _target;
}
[Bindable]
public function get bgWidth():Number {
return _bgWidth;
}
public function set bgWidth(val:Number):void {
_bgWidth = val;
}
[Bindable]
public function get bgHeight():Number {
return _bgHeight;
}
public function set bgHeight(val:Number):void {
_bgHeight = val;
}
public function init():void {
flash.system.Security.allowDomain("*");
target = slider;
xmlService.send();
}
private function resultHandler(event:ResultEvent):void {
imgModel = event.result.data.row as ArrayCollection;
for(var i:int=0;i<imgModel.length;i++) {
var image:Image = new Image();
image.source = imgModel.getItemAt(i).path;
image.width=128;
slider.addChild(image);
slider.width = slider.width + image.width + 4;
}
process();
}
public function process():void {
bar.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
this.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
bg.addEventListener(MouseEvent.CLICK, click);
percent = (target.width-bg.width)/(bg.width-bar.width);
}
private function mouseDown(event:MouseEvent):void {
flag = true;
offset = bar.globalToLocal(new Point(mouseX, mouseY));
}
private function mouseMove(event:MouseEvent):void {
if(flag) {
point = this.globalToLocal(new Point(mouseX, mouseY));
moveBar();
}
}
private function mouseUp(event:MouseEvent):void {
flag = false;
offset = null;
}
private function click(event:MouseEvent):void {
if(event.target == bar) {
}
else if(!flag) {
if(timer != null && timer.running)
timer.stop();
//point = bg.globalToLocal(new Point(mouseX, mouseY));
point = new Point(event.localX-40,event.localY);
if(point.x<0)
point.x = 0;
if(point.x>this.width-80)
point.x = this.width-80;
moving = true;
timer = new Timer(10);
timer.addEventListener("timer", moveBar);
timer.start();
}
}
private function moveBar(event:TimerEvent=null):void {
if(flag) {
if(point.x<offset.x) {
bar.x = 0;
target.x = 0;
}
else if(point.x>this.width-(bar.width-offset.x)) {
bar.x = this.width-bar.width;
target.x = - (bar.x*percent);
}
else {
bar.x = point.x - offset.x;
target.x = - (bar.x*percent);
}
}
else if(moving) {
if(bar.x+speed<point.x) {
bar.x += speed;
}
else if(bar.x>point.x) {
bar.x -= speed;
}
else {
moving = false;
timer.stop();
}
target.x = - (bar.x*percent);
}
}
]]>
</mx:Script>
</mx:Canvas>
应该算是做成一个组件了, 控制, 数据和一些样式该暴露的都暴露了,
在主页面里调用:
<ui:iSlider id="component" width="950" y="202"
componentsHeight="20" speed="6"
bgWidth="950" bgHeight="200" url="assets/xml/data.xml"/>
XML文件里格式是这样的:
<data>
<row>
<title></title>
<alt></alt>
<url></url>
<path>assets/images/1.png</path>
</row>
</data>
做完以后, 虽然是可以交任务了, 但感觉并没有发挥出FLEX的优势,
额~`发了篇烂文`~我已经准备好接受各位大牛的批判了``
分享到:
相关推荐
flex-2.6.4
1. **flex-messaging-core.jar**:这是Flex Messaging框架的基础库,提供了核心的基础设施和服务。它包含AMF(Action Message Format)编解码器,用于高效地序列化和反序列化数据,以及基本的消息传递机制。AMF是一...
这个名为“spring-flex-1.5.0.M2-dist.zip”的压缩包,包含了Spring Flex 1.5.0.M2版本的所有必要组件,使得开发者能够快速地开发和部署基于Flex的客户端应用。 在Spring Flex 1.5.0.M2中,核心组件`spring-flex-...
这个"flex-2.6.4.tar.gz"文件是Flex 2.6.4版本的源代码压缩包,遵循GNU General Public License (GPL)发布。在Linux和类Unix系统中,这种.tar.gz格式常用于存储和分发软件源代码,因为它可以高效地压缩大量文件。 ...
flex-messaging-core-4.7.3.jar 最新版,下载了好长时间才下载下来,亲测可用!
在flex-messaging-core.jar中,包含了一些关键组件和接口,例如: 1. **MessageBroker**: 这是Flex消息传递系统的中心,它管理消息的路由,调度和处理。MessageBroker实例化并配置了各种服务,如HTTP、HTTPS、RTMP...
标题中的"flex-2.5.39.tar.gz"是一个典型的Linux软件包文件名,它包含了一些关键信息。"flex"是这个包的核心组件,它是一个开源工具,用于生成词法分析器(lexer),通常在编译器构造、解析器开发或者处理结构化文本...
尽管Google Code已不再接受新的项目,但许多有价值的项目,如flex-iframe-1.4.6,仍然可以在其存档中找到。 在Flex框架中,开发者通常使用ActionScript来创建富互联网应用程序(RIA)。然而,有时需要在Flex应用...
这个“flex-2.6.0.tar.gz”文件是一个针对Flex 2.6.0版本的源码压缩包,适用于Unix/Linux类操作系统。在Linux环境中,我们通常会用tar命令来解压这种格式的文件,例如:“tar -zxvf flex-2.6.0.tar.gz”。 Flex的...
Flex Messaging是Adobe Flex框架的一部分,它提供了一个强大的实时通信平台,允许客户端(通常是Flex应用程序)与服务器进行双向数据交换。4.7.3版本是这个组件的一个更新,它可能包含了性能提升、错误修复以及新的...
《深入解析Forex-Flex-EA-V4.91与海龟交易策略在MT4平台的应用》 在金融交易领域,自动交易系统(Expert Advisor,简称EA)的应用日益广泛,尤其是外汇市场(Forex)。本文将围绕“Forex-Flex-EA-V4.91”这一特定的...
flex-messaging-core jar包
spring-flex-1.5.0.RELEASE spring-flex-1.5.0.RELEASE spring-flex-1.5.0.RELEASE spring-flex-1.5.0.RELEASE
《深入理解Flex-Iframe 1.4.1:构建跨平台的嵌入式视图解决方案》 在现代Web开发中,iframe(内联框架)是一种常见的技术,用于在一个HTML页面中嵌入另一个网页或者实现页面的分隔。当我们谈论"flex-iframe-1.4.1....
flex-messaging-common
flex-messaging-proxy.jarflex-messaging-proxy.jarflex-messaging-proxy.jarflex-messaging-proxy.jar
在这个过程中,`flex-bootstrap-jsp.jar` 和 `flex-sdk-merged.jar` 是两个至关重要的组件。下面将详细介绍这两个jar包的作用以及如何在JSP中集成Flex。 `flex-bootstrap-jsp.jar` 是一个关键的库文件,主要用于在...
在编程世界中,`bison` 和 `flex` 是两款非常重要的工具,它们主要用于解析器和词法分析器的生成。...在`bison-2.1`和`flex-2.5.4a-1`这两个版本中,我们可以期待它们提供了稳定的性能和兼容性,以满足各种项目的需要。
flex-messaging-common.jar
Flex布局,全称为“Flexible Box”,也常被称为 Flexbox,是一种在CSS3中引入的布局模式,用于处理复杂的网页布局问题。它旨在提供一种更加灵活、动态的方式来组织和对齐内容,尤其适用于单列和多列布局,以及响应式...