这个问题不知道在flex中NumericStepper组件会不会有,现在说的是flash cs3 的NumericStepper组件
其实问题简单说是:在NumericStepper组件中,选中文本然后鼠标向右拖动会产生空白区域
分析一下问题产生的根本原因
NumericStepper组件其实分为2个部分一部分是右侧可以用来点击上下的按钮区域,另外一部分是在这个按钮区域下的TextInput组件
因为TextInput组件和NumericStepper组件同宽的,所以就是有这种情况
注NumericStepper的textField属性是对TextInput组件的引用
1、 即便设置了NumericStepper.textField.maxChars = 2
2、 即便设置了NumericStepper.textField=10(设置一个比NumericStepper.width小的值,但是无效)
3、 即便设置了NumericStepper.textField.horizontalScrollPosition = 0
4、 即便监听了NumericStepper.textField 的 focusIn focusOut click 和 change 事件
5、 甚至还监听了NumericStepper.textField的mouseOver mouseOut事件
将NumericStepper.textField.horizontalScrollPosition设置为 0(让文本从最左边开始显示)
6、 更还设置了NumericStepper.textField.textField的scrollH属性为0
都无法避免下面的这种比较极端的情况且仅ie7浏览器下出现
就是在我点击了NumericStepper组件中的TextInput组件,然后向右移动鼠标,会出现空白,然后什么都不点的情况下,选择ie7的另外一个打开的窗口,然后再选择放flash的那个页面的时候,那个空白区域依然存在,这是因为这是ie7并没有为当前回到的那个flash页面设置为焦点,再点一下ie7的导航栏就不会有这个问题,因为ie7设置了焦点,而flash也就监听到了焦点并执行了我想要的操作。
看来有些时候脑子是会糊涂的,吃饭的时候我就在想,既然问题出在鼠标移动的时候,为什么不从鼠标移动这个事件来着手解决问题呢?
经过测试,我发现我的想法是对的
监听一下MouseOver事件,然后执行NumericStepper.textField.horizontalScrollPosition=0,就从根源上把问题解决了。
其实我很少用mouseOver事件,因为这个事件的底层是基于帧频或者timer的,比较耗费cpu资源,但是好在作为一个内部的事件,它有很好的remove机制,且仅仅用在组件上,消耗的系统资源有限且时间有限,但是可以让我省去其它无意义的监听事件,又能从根源上解决问题,所以我认为这种解决方法是可行的。不知道大家的意见如何?
没有想到一个看上去那么简单的方法,确实通过证明了其它方法不可行而得出的,与大家分享经验是希望有发生同样问题的时候少走弯路,节约宝贵的时间去解决其它的问题,更或许还可以找到一些解决其它问题的思路。
最近有点活的倒回去了,很多问题搞到最后才想到解决的方法,失败。