1. 程式人生 > >基於Flex 4.6實現 Picture Slide (圖片滑動展示效果)

基於Flex 4.6實現 Picture Slide (圖片滑動展示效果)

之前專案中有用到這種效果,圖片幻燈顯示,一般來說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);

效果:

對應的資源圖片: 傳送門>>

    

相關推薦

基於Flex 4.6實現 Picture Slide 圖片滑動展示效果

之前專案中有用到這種效果,圖片幻燈顯示,一般來說JS實現的較多,Flex的話,貌似之前有找到過Flex3的實現方案,so 我就借鑑一下咯 當然根據實際應用情況,將程式碼升級到Flex4,然後又根據自己的應用需要增加了些控制效果。 閒話不多說,先上程式碼 PictureSli

Spring2.5學習4.2_Proxy實現動態代理目標類實現隨意接口

靈活 iss sta blank 輸入 font ima tar ons 靜態代理的缺點是在代理類中綁定了固定的接口,不利於擴展,動態代理則不然,通過動態代理能夠對不論什麽實現某一接口的類進行功能性增強。 在java中動態代理由InvocationHander來實現。

寫一個函數計算但參數為nn很大時的值1-2+3-4+5-6+7……+n。考慮程序執行效率

參數 color n) col sys class n-1 == code 1 private static void jisuan(int n) { 2 int sum=0; 3 if(n%2==0){ 4 sum=-(n/2)

Centos7 zabbix3.4.6的安裝部署

pos gpo 監控服務器 技術分享 color conf blog sys nbsp 接著安裝zabbix客戶端 直接安裝在服務器上 監控服務器 ip 192.168.161.25 yum -y install zabbix-agent #通過Yum安裝zabbix

oozie4.3.0+sqoop1.4.6實現mysql到hive的增量抽取

ssa 使用 註意 表分區 namenode localhost coord 分隔 his 1.準備數據源 mysql中表bigdata,數據如下: 2. 準備目標表 目標表存放hive中數據庫dw_stg表bigdata 保存路徑為 hdfs://localh

Zabbix 3.4.6實現微信告警

oss height 準備 python Language ont radius https usr 一、註冊企業微信準備發送消息python腳本註冊企業微信,獲取CorpID在企業微信中創建一個應用,獲取AgentID和Secret安裝simplejsonwget htt

基於argparser模塊實現 ls 功能基本實現

script ESS etime code lib 獲取文件 from rom art 第一版:實現基本功能,但是沒有獲取屬主,屬組,只能在一個目錄下,不能傳入多個目錄:如 ls /etc /tmp 1 import argparse 2 from pathlib

RT-Thread 讀後感6 ——實現排程器排程器初始化,啟動排程器

1. 排程器初始化 排程器是作業系統的核心,主要功能是實現執行緒的切換,即從就緒列表中找到優先順序最高的執行緒,然後執行該執行緒。關於排程器的程式碼,RT-Thread在scheduler.c檔案中實現。 排程器初始化:排程器在使用前必須初始化,具體程式碼如下: /* 初始化系統排程器

4.4.6 取樣頻率同步

4.4.6 取樣頻率同步(一) 取樣頻偏產生原因:       在OFDM系統中,發射機和接收機的ADC、DAC的晶振不可能具有完全相同的時鐘週期和相位,這將導致二者的取樣間隔之間會慢慢產生偏差,從而對整個系統的效能帶來嚴重影響。(

基於Jenkins,docker實現自動化部署持續交付

前言 隨著業務的增長,需求也開始增多,每個需求的大小,開發週期,釋出時間都不一致。基於微服務的系統架構,功能的疊加,對應的服務的數量也在增加,大小功能的快速迭代,更加要求部署的快速化,智慧化。因此,傳統的人工部署已經心有餘而力不足。持續整合,持續部署,持續互動對於微服務開發來說,是提高團隊整體效率不可或缺的

基於httpclient4.5.6實現ssl雙向訪問、單向訪問

1.引入包 <dependency>     <groupId>org.apache.httpcomponents</groupId>     <artifactId>httpclient</artifactId>

ubuntu18.04安裝gitlab-ee11.4.6及簡單學習

參考:https://www.gitlab.com.cn/installation/#ubuntu 今天是2018年11月22日 Gitlab-ee最新版本是11.4.6 採用ubuntu18.04安裝gitlab-ee 官方說了,如果不確定裝gitlab-ce還是gitlab-

A/B 測試的基本概念舉例理解以及具體實現方法【傳統A/B測試基於後端的 A/B 測試Back-end AB test,現在基本上基於前端js在客戶端進行分流,有更多優點,請看裡面】

文章來源:http://www.aliued.cn/2010/09/27/ab-testing-realization-method.html 什麼是A/B測試?以及如何進行? 很多朋友都問我怎麼進行A/B測試,我一般都不直接回答他們的問題,而是首先問一句:“你的日

基於Jenkins,docker實現自動化部署持續互動

前言隨著業務的增長,需求也開始增多,每個需求的大小,開發週期,釋出時間都不一致。基於微服務的系統架構,功能的疊加,對應的服務的數量也在增加,大小功能的快速迭代,更加要求部署的快速化,智慧化。因此,傳統的人工部署已經心有餘而力不足。持續整合,持續部署,持續互動對於微服務開發來說

Elasticsearch5基於completion suggester實現提示詞類京東淘寶

支援拼音首字母,全拼,和中文匹配提示,如下1、建立index,設定settingcurl -XPUT "http://localhost:9200/medcl/" -d ' { "index": { "analysis": { "analyzer": {

練習4-6 猜數字遊戲15 分

#include<stdio.h> int main() { int rand,m,n; int i,flag=1; scanf("%d%d",&rand,&n); for(i=1;i<=

基於python,scrapy,redis實現主從式分散式的一種master-slave爬蟲

前言這是本人的第一篇部落格,感觸還是很多的,最近在幫朋友做一個分散式爬蟲的論文,遇到很多坑,不過已經一一填平,廢話不多說啦。分類(1)主從分散式爬蟲:由一臺master伺服器, 來提供url的分發, 維護待抓取url的list。由多臺slave伺服器執行網頁抓取功能, sla

GCC-3.4.6原始碼學習筆記128

5.12.5. 第三個例子 現在我們已經有了“ SmallObject ”的定義,那麼我們使用下面的“ main ”函式來使用這個類,從中看一下將會產生怎樣的中間樹。 using namespace Loki; int main () { SmallObj

如何基於 echarts 在柱狀圖或條形圖上實現轉換率?有想法嗎?

[TOC] > 我是沒想法啦(一開始)。其實,好久沒接觸 echarts 了,至少有一年多了,想起以前折騰地圖的情景了

一個基於QT簡單登錄對話框帶驗證碼功能

oid mov rim cat pla .sh end qpainter turn 1. 對話框樣式 2. 源代碼 ①. main.cpp #include <QtGui/QApplication> #include "QLoginDialog.h