`
darkty2009
  • 浏览: 1384 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

[Flex]-把问题弄复杂了的滑动条效果

    博客分类:
  • RIA
阅读更多
看着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的优势,

额~`发了篇烂文`~我已经准备好接受各位大牛的批判了``
1
1
分享到:
评论

相关推荐

    flex-2.6.4.tar

    flex-2.6.4

    flex-messaging系列jar包

    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-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.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-4.7.3.jar 最新版,下载了好长时间才下载下来,亲测可用!

    flex-messaging-core.jar

    在flex-messaging-core.jar中,包含了一些关键组件和接口,例如: 1. **MessageBroker**: 这是Flex消息传递系统的中心,它管理消息的路由,调度和处理。MessageBroker实例化并配置了各种服务,如HTTP、HTTPS、RTMP...

    flex-2.5.39.tar.gz

    标题中的"flex-2.5.39.tar.gz"是一个典型的Linux软件包文件名,它包含了一些关键信息。"flex"是这个包的核心组件,它是一个开源工具,用于生成词法分析器(lexer),通常在编译器构造、解析器开发或者处理结构化文本...

    flex-iframe-1.4.6

    尽管Google Code已不再接受新的项目,但许多有价值的项目,如flex-iframe-1.4.6,仍然可以在其存档中找到。 在Flex框架中,开发者通常使用ActionScript来创建富互联网应用程序(RIA)。然而,有时需要在Flex应用...

    flex-2.6.0.tar.gz

    这个“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-4.7.3最新版本的jar

    Flex Messaging是Adobe Flex框架的一部分,它提供了一个强大的实时通信平台,允许客户端(通常是Flex应用程序)与服务器进行双向数据交换。4.7.3版本是这个组件的一个更新,它可能包含了性能提升、错误修复以及新的...

    Forex-Flex-EA-V4.91_flexEA_海龟MT4_ea_mt4_ea源码_

    《深入解析Forex-Flex-EA-V4.91与海龟交易策略在MT4平台的应用》 在金融交易领域,自动交易系统(Expert Advisor,简称EA)的应用日益广泛,尤其是外汇市场(Forex)。本文将围绕“Forex-Flex-EA-V4.91”这一特定的...

    flex-messaging-core

    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 spring-flex-1.5.0.RELEASE

    flex-iframe-1.4.1.zip

    《深入理解Flex-Iframe 1.4.1:构建跨平台的嵌入式视图解决方案》 在现代Web开发中,iframe(内联框架)是一种常见的技术,用于在一个HTML页面中嵌入另一个网页或者实现页面的分隔。当我们谈论"flex-iframe-1.4.1....

    flex-messaging-common

    flex-messaging-common

    flex-messaging-proxy.jar

    flex-messaging-proxy.jarflex-messaging-proxy.jarflex-messaging-proxy.jarflex-messaging-proxy.jar

    Flex-jsp两个必要jar包

    在这个过程中,`flex-bootstrap-jsp.jar` 和 `flex-sdk-merged.jar` 是两个至关重要的组件。下面将详细介绍这两个jar包的作用以及如何在JSP中集成Flex。 `flex-bootstrap-jsp.jar` 是一个关键的库文件,主要用于在...

    bison-2.1和flex-2.5.4a-1

    在编程世界中,`bison` 和 `flex` 是两款非常重要的工具,它们主要用于解析器和词法分析器的生成。...在`bison-2.1`和`flex-2.5.4a-1`这两个版本中,我们可以期待它们提供了稳定的性能和兼容性,以满足各种项目的需要。

    flex-messaging-common.jar

    flex-messaging-common.jar

    flex布局-flex-layout-master.zip

    Flex布局,全称为“Flexible Box”,也常被称为 Flexbox,是一种在CSS3中引入的布局模式,用于处理复杂的网页布局问题。它旨在提供一种更加灵活、动态的方式来组织和对齐内容,尤其适用于单列和多列布局,以及响应式...

Global site tag (gtag.js) - Google Analytics