用Flex模拟智能手机表单输入的自动放大功能

用iphone或itouch登录过微薄的同学们想必都会发现:登录一些手机版网站(比如微薄时),表单中的输入框会自动放大,以方便用户输入,等输入完成后,页面会再次缩小到正常状态。

在flex开发过程中,有时也会遇到一些输入项很多的表单,可以借鉴iphone上的这种体验,基本思路就是:将整个容器放大,以适应屏幕,然后将获得焦点的文本框定位到屏幕中央。

下面是演示:

当UserName与PassWord文本框获得焦点时,表单(其实就是panel)会自动放大,并重新定位,最终将获得焦点的文本框定位在屏幕中央,以方便输入。点击checkbox或login按钮时,会恢复正常大小。

主要代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="windowedapplication1_applicationCompleteHandler(event)" width="640" height="480" >
	<fx:Script>
		<![CDATA[
			import gs.TweenLite;
			import mx.events.FlexEvent;						

			private var SW:Number;//舞台的宽度
			private var SH:Number;//舞台的高度
			private var WH:Number;//panel的高度
			private var WW:Number;//panel的宽度

			protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
			{
				SW = stage.stageWidth;
				SH = stage.stageHeight;
				WW = loginWin.width;
				WH = loginWin.height;
				initPosAnsScale();
			}			

			private function initPosAnsScale():void
			{
				TweenLite.to(loginWin,0.2,{x:0.5*(SW - WW),y:0.5*(SH - WH),scaleX:1,scaleY:1});
			}

			protected override function focusInHandler(e:FocusEvent):void
			{
				var radioX:Number = SW/WW;
				var radioY:Number = SH/WH;
				var radio:Number = Math.min(radioX,radioY);
				//注:e.target得到的对象类似于:
				//HelloWorld0.WindowedApplicationSkin2.Group3.contentGroup.loginWin.
				//PanelSkin8._PanelSkin_Group1.contents.contentGroup.
				//txtName.TextInputSkin21.textDisplay
				trace(e.target);
				//所以这里要连用3次parent才能得到正确的文件框(txtName)对象
				var current:DisplayObject = e.target.parent.parent as DisplayObject;

				//当前焦点对应文本框在舞台上的实际位置
				var _nX:Number = current.x * radio + loginWin.x;
				var _nY:Number = current.y * radio + loginWin.y + loginWin.titleDisplay.height*radio;				

				//当前焦点对应的文本框中心点的实际位置
				var _cX:Number = _nX + 0.5*e.target.width*radio;
				var _cY:Number = _nY + 0.5*e.target.height*radio;

				//计算要移动的距离
				var _dx:Number = _cX - 0.5*SW;
				var _dy:Number = _cY - 0.5*SH;

				//缩放+移动
				var desX:Number = loginWin.x - _dx;
				var desY:Number = loginWin.y - _dy;
				TweenLite.to(loginWin,0.2,{scaleX:radio,scaleY:radio,x:desX,y:desY});

			}

			protected override function focusOutHandler(e:FocusEvent):void
			{
				initPosAnsScale();
			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<s:Panel title="Please Login" id="loginWin" dropShadowVisible="false" width="330" x="139" height="219" y="94">
		<s:layout>
			<s:BasicLayout/>
		</s:layout>
		<s:Label x="129" y="10" text="UserName"/>
		<s:TextInput x="96" y="30" id="txtName" focusIn="focusInHandler(event)" focusOut="focusOutHandler(event)"/>
		<s:Label x="131.5" y="65" text="Password"/>
		<s:TextInput x="96" y="85" id="txtPwd" displayAsPassword="true" focusIn="focusInHandler(event)" focusOut="focusOutHandler(event)"/>
		<s:Button x="125" y="148" label="login"/>
		<s:CheckBox x="113" y="118" label="Remember me" click="focusOutHandler(null)"/>
	</s:Panel>
</s:Application>
时间: 2024-09-29 10:33:05

用Flex模拟智能手机表单输入的自动放大功能的相关文章

JS判断表单输入是否为空

 本篇文章主要是对JS判断表单输入是否为空的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助  代码如下: //去掉输入字符串两边的空格   function trim(s) {       var count = s.length;       var st    = 0;       // start       var end   = count-1; // end         if (s == "") return s;       while (st &l

ajax-easyui 怎么用js验证表单 输入的是否正确。

问题描述 easyui 怎么用js验证表单 输入的是否正确. 增加一个用户,用身份证号验证唯一性,增加和修改用同一个表单提交的. 怎么用ajax验证是否已经存在相同的身份证号码,增加的时候可以验证,但是修改是也会验证, 但是,会数据库已经存在了.所有验证通不过,表单不能正常提交. 我的方法: http://star77266989.iteye.com/blog/2192022 解决方案 参考:http://www.w3cschool.cc/jeasyui/jeasyui-form-form3.h

jquery实现表单输入时提示文字滑动向上效果_jquery

本文实例讲述了jquery实现表单输入时提示文字滑动向上效果.分享给大家供大家参考.具体如下: 这里基于jQuery实现的表单输入框提示效果,当不输入的时候,提示文字就显示在输入框中,当鼠标点击文本框要输入文字的时候,提示文字向滑出输入框,好像很个性也很智能的样子,用户体验比较不错,运用了CSS3的部分属性,因此在测试时,请尽量要用高版本的IE9或chrome和火狐等网页浏览器. 运行效果截图如下: 具体代码如下: <!doctype html> <html> <head&g

javascript:巧用eval函数组装表单输入项为json对象

在ajax方式做web开发时,经常会遇到会保存前,收集表单输入项,组成json对象,然后把对象直接post到服务端的场景 常规做法是在js里写类似如下的代码: var myObj = {}; myObj.x = document.getElementById("x").value; myObj.y = document.getElementById("y").value; //... //然后ajax post或get提交   表单元素不多的时候,这样还好,但是如果

javascript巧用eval函数组装表单输入项为json对象的方法_javascript技巧

本文实例讲述了javascript巧用eval函数组装表单输入项为json对象的方法.分享给大家供大家参考,具体如下: 在ajax方式做web开发时,经常会遇到会保存前,收集表单输入项,组成json对象,然后把对象直接post到服务端的场景 常规做法是在js里写类似如下的代码: var myObj = {}; myObj.x = document.getElementById("x").value; myObj.y = document.getElementById("y&q

PHP简单处理表单输入的特殊字符的方法_php技巧

本文实例讲述了PHP简单处理表单输入的特殊字符的方法.分享给大家供大家参考,具体如下: <html> <body> <?php if ($_POST['submitted'] == "yes"){ $yourname = $_POST['yourname']; $yourname = trim ($yourname); $yourname = strip_tags ($yourname); $yourname = htmlspecialchars ($yo

Form表单按回车自动提交表单的实现方法_javascript技巧

1.form表单中只有一个input标签,按回车键将自动提交表单 当form表单中只有一个<input type="text" name='name' />时按回车键将会自动将表单提交. <form id='form1' action='a1.jsp' method='post'> <input type='text' name='name' /> </form> 如果不想让其自动提交可以这样做: 再添加一个<input type=

ThinkPHP提交表单时默认自动转义的解决方法_php实例

本文实例讲述了ThinkPHP提交表单时默认自动转义的解决方法.分享给大家供大家参考.具体方法如下: 一.问题: 在ThinkPHP中提交表单插入数据的时候,单引号和双引号是会被自动转义的,就是会自动的加上反斜线,但是我不想给单引号和双引号加上反斜线. 在ThinkPHP中提交表单插入数据的时候,单引号和双引号是会被自动转义的,就是会自动的加上反斜线,但是我不想给单引号和双引号加上反斜线,在ThinkPHP中提交表单插入数据的时候,单引号和双引号是会被自动转义的,就是会自动的加上反斜线,但是我不

Ajax提交表单时验证码自动验证 php后端验证码检测_php实例

本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> <head> <title>验证码提交自验证</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta htt