加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基于Flex 4.6实现 Picture Slide (图片滑动展示效果)

发布时间:2020-12-15 03:34:06 所属栏目:百科 来源:网络整理
导读:之前项目中有用到这种效果,图片幻灯显示,一般来说JS实现的较多,Flex的话,貌似之前有找到过Flex3的实现方案,so 我就借鉴一下咯 当然根据实际应用情况,将代码升级到Flex4,然后又根据自己的应用需要增加了些控制效果。 闲话不多说,先上代码 PictureSlid

之前项目中有用到这种效果,图片幻灯显示,一般来说JS实现的较多,Flex的话,貌似之前有找到过Flex3的实现方案,so 我就借鉴一下咯

当然根据实际应用情况,将代码升级到Flex4,然后又根据自己的应用需要增加了些控制效果。

闲话不多说,先上代码

PictureSlide.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
		 initialize="initializeHandler(event)">
	<fx:Script>
		<![CDATA[
			import com.gs.support.AppEventBus;
			
			import flash.events.MouseEvent;
			
			import mx.controls.Image;
			import mx.events.FlexEvent;
			
			import spark.components.HGroup;
			import spark.effects.Move;
			[Bindable]
			public var picGroup:Array=[];
			[Bindable]
			public var backColor:uint=0x000000;
			[Bindable]
			public var bindingKey:String;
			
			private static const PIC_ARRAY_INIT:String="customCom_PictureSlide_DataInit";
			
			public static const PIC_URL:String="picUrl";
			public static const PIC_NAME:String="picName";
			
			private var pic_num:int;
			
			private static function getInstanceBindingKey():String{
				return PIC_ARRAY_INIT+"_"+new Date().time;
			}
			
			protected function initializeHandler(event:FlexEvent):void
			{
				bindingKey=bindingKey?bindingKey:getInstanceBindingKey();
				AppEventBus.addListener(bindingKey,function(event:AppEventBus):void{
					picGroup=event.data as Array;
						if(picGroup.length>0){
							fillPic(picGroup);
						}
					});
			}
			
			
			private function fillPic(picArray:Array):void{
				for (var i:int=0;i<picArray.length ;i++)
				{
					var  item:Object=picArray[i];
					if(item[PIC_URL]){
						if(item[PIC_NAME]){
							createOnespic(item[PIC_URL],item[PIC_NAME]);
						}else{
							createOnespic(item[PIC_URL]);
						}
						
					}
					
				}   
				pic_num = picgroup.numElements;
				var timg:Image = picgroup.getElementAt(pic_num/2) as Image;
				set_pic(timg);
			}
			
			protected function btnLeft_mouSEOverHandler(event:MouseEvent):void
			{
				btnLeft2.visible=true;
				btnLeft1.visible=false;
			}
			protected function btnLeft_mouSEOutHandler(event:MouseEvent):void
			{
				btnLeft1.visible=true;
				btnLeft2.visible=false;
			}
			protected function btnRight_mouSEOverHandler(event:MouseEvent):void
			{
				btnRight2.visible=true;
				btnRight1.visible=false;
			}           
			protected function btnRight_mouSEOutHandler(event:MouseEvent):void
			{
				btnRight1.visible=true;
				btnRight2.visible=false;
			}
			private function set_pic(t:Image):void
			{
				var temp:Image;
				var index1:int;
				for(var i:int=0;i<pic_num;i++)
				{
					temp = picgroup.getElementAt(i) as Image;       
					if(temp == t)
					{
						index1=i;
					}
					temp.alpha = 0.5;       
					temp.trustContent = true;
				}
				bigImg.load(t.source.toString());
//				bigImg.source=t.source.toString();
//				bigImg.width=bigImg.parent.contentWidth;
				bigImg.maxHeight=bigImg.parent.height-100;
				bigImg.maxWidth=bigImg.parent.width;
				t.trustContent = false; 
				t.alpha = 1;
				if(this.width<pic_num*80)
				{
					picMove.stop();
					picMove.xFrom = spics.x;
					picMove.xTo = this.width/2 - index1*80 - 38;
					picMove.duration=2000;
					picMove.play();
				}
				
			}
			private function createOnespic(url:String,nameUrl:String=""):void
			{
				var pic:Image;
				pic = new Image();
				pic.source = url;
				pic.width = 76;
				pic.height = 76;
				pic.buttonMode = true;
				pic.name = nameUrl;
				pic.addEventListener(MouseEvent.CLICK,img_click); 
				pic.trustContent = true;
				pic.alpha = 0.5;
				picgroup.addElement(pic);
			}
			protected function img_click(event:MouseEvent):void
			{
				var t:Image = event.currentTarget as Image;
				set_pic(t);
			}
			protected function btnLeft1_clickHandler(event:MouseEvent):void
			{
				if(picGroup.length>0){
					var temp:Image;
					var i:int=0
					for(;i<pic_num;i++)
					{
						temp = picgroup.getElementAt(i) as Image;       
						if(!temp.trustContent)
						{
							break;
						}
					}
					i-=1;
					if(i<0)
					{
						i=pic_num-1;
					}
					set_pic(picgroup.getElementAt(i) as Image);
				}
				
			}
			protected function btnRight1_clickHandler(event:MouseEvent):void
			{
				if(picGroup.length>0){
					var temp:Image;
					var i:int=0
					for(;i<pic_num;i++)
					{
						temp = picgroup.getElementAt(i) as Image;       
						if(!temp.trustContent)
						{
							break;
						}
					}
					i+=1;
					if(i>pic_num-1)
					{
						i=0;
					}
					set_pic(picgroup.getElementAt(i) as Image);
				}
				
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<s:Move id="picMove" target="{spics}">
			
		</s:Move>
	</fx:Declarations>
	<s:BorderContainer x="0" y="0"
					   width="100%" height="100%"
					   backgroundColor="{backColor}"
					   borderVisible="false">
		<mx:Image id="bigImg" top="5" horizontalAlign="center"
				  verticalAlign="middle"
				  horizontalCenter="0" verticalCenter="0" />     
	</s:BorderContainer>
	<s:BorderContainer x="0" y="0" top="0"
					   width="55" height="100%"
					   backgroundAlpha="0"
					   borderVisible="false">
		<mx:Image id="btnLeft1"
				  horizontalCenter="0" verticalCenter="0"
				  source="@Embed(source='assets/images/btn_left_1.png')" 
				  mouSEOver="btnLeft_mouSEOverHandler(event)"
				  mouSEOut="btnLeft_mouSEOutHandler(event)"
				  buttonMode="true" />
		<mx:Image id="btnLeft2"  visible="false"
				  horizontalCenter="0" verticalCenter="0"
				  source="@Embed(source='assets/images/btn_left_2.png')" 
				  mouSEOver="btnLeft_mouSEOverHandler(event)"
				  mouSEOut="btnLeft_mouSEOutHandler(event)"
				  click="btnLeft1_clickHandler(event)"
				  buttonMode="true"/>
	</s:BorderContainer>
	<s:BorderContainer y="0" width="55"
					   height="100%" right="0"
					   backgroundAlpha="0"
					   borderVisible="false">
		<mx:Image id="btnRight1"
				  horizontalCenter="0" verticalCenter="0"
				  source="@Embed(source='assets/images/btn_right_1.png')"
				  mouSEOver="btnRight_mouSEOverHandler(event)"
				  mouSEOut="btnRight_mouSEOutHandler(event)"
				  buttonMode="true"/>
		<mx:Image id="btnRight2" visible="false"
				  horizontalCenter="0" verticalCenter="0"
				  source="@Embed(source='assets/images/btn_right_2.png')"
				  mouSEOver="btnRight_mouSEOverHandler(event)"
				  mouSEOut="btnRight_mouSEOutHandler(event)"
				  click="btnRight1_clickHandler(event)"
				  buttonMode="true"/>
	</s:BorderContainer>
	<s:BorderContainer id="spics" width="100%" height="86" bottom="0" backgroundAlpha="0" borderVisible="false">
		<s:HGroup id="picgroup"  horizontalCenter="0" verticalCenter="0" gap="4">
		</s:HGroup>       
	</s:BorderContainer>
</s:Group>


功能说明:

1、上方是大图展示区,下面是缩率图展示区,点击下面的缩率图,上面跟着显示对于的大图;(缩率图显示和大图 使用的图源是同一图源,代码中未对图片进行处理。

2、左右的按键也可以控制图片的左右播放;


目前暂未实现图片自动播放功能。


使用方式:

<CustomCom:PictureSlide id="picGroup"  backColor="{getStyle('contentBackgroundColor')}" 
							picGroup="{picAC}" width="500" height="400"/>

下面是对应的As脚本

for(var i:int=0;i<picPath.length;i++){
					if(picPath[i]){
						var imgItem:Object={
							picUrl:picPath[i],picName:picPath[i]
						};
						picAC.push(imgItem);
					}
					
				}
				AppEventBus.dispatch(picGroup.bindingKey,picAC);

效果:


对应的资源图片:?传送门>>

? ??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读