用Flex模拟智能手机表单输入的自动放大功能
时间:2022-04-23
本文章向大家介绍用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>
- 每天一个Linux命令:chmod
- SparkSql 中外连接查询中的谓词下推规则
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
- Python进行数据可视化分析快速教程实例
- 一个抓取豆瓣图书的开源爬虫的详细步骤
- Java 8 Stream 教程 (三)
- silverlight ListBox 多列图片效果
- ZooKeeper构建分布式锁(选译)
- Caliburn.Micro学习笔记(二)----Actions
- 每天一个Linux命令:find
- textFile构建RDD的分区及compute计算策略
- 一个基于Flask和MongoDB的CMS内容管理系统
- c++多重继承小结
- 初识PB级数据分析利器Prestodb
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis | 源码阅读 —— 字符串
- 一个小白的角度看JavaScript Promise 完整指南
- 教会舍友玩 Git (再也不用担心他的学习)
- Python极简入门:数据类型、条件语句、循环语句、异常处理
- 手把手带你入门Python爬虫Scrapy
- 工作中巧用了这几个设计模式重构代码,女同事直呼666
- SourceMap知多少:介绍与实践
- (实战)Node.js 实现抢票小工具&短信通知提醒
- 目标检测 | Anchor free之CenterNet深度解析
- C++第二章 变量与基本类型
- springboot2结合mybatis拦截器实现主键自动生成
- 学习一下Python3的协程
- Android网络收集和ping封装库
- Kubernetes之helm部署使用
- 想掌握 Binder 机制?驱动核心源码详解和Binder超系统学习资源,想学不会都难!