/**
* Author: Kevin Luo
* Email: Kevin.luo.sl@gmail.com
* Description:
* The passed in conponent can be scroll as iphone style;
* */
package util
{
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import mx.containers.Canvas;
public class ScrollView extends Canvas
{
private var _displayObj:DisplayObject;
private var isMouseDown:Boolean=false;
private var mDY:int;
private var sY:int;
private var eY:int;
private var mDX:int;
private var sX:int;
private var eX:int;
private var isDragging:Boolean=false;
private var sTime:Number;
private var eTime:Number
private var inertialTimerY:Timer;
private var inertialTimerX:Timer;
private var speedY:Number;
private var speedX:Number;
private var a:int;
public function get displayObj():DisplayObject
{
return this._displayObj;
}
public function ScrollView(value:DisplayObject, a:int=50)
{
super();
this.horizontalScrollPolicy="off";
this.verticalScrollPolicy="off";
this._displayObj=value;
this.a=a;
this.addChild(value);
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandle);
this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandle);
this.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle);
this.inertialTimerY=new Timer(30);
this.inertialTimerX=new Timer(30);
this.inertialTimerY.addEventListener(TimerEvent.TIMER, inertialMovePieceY);
this.inertialTimerX.addEventListener(TimerEvent.TIMER, inertialMovePieceX);
}
protected function mouseDownHandle(e:MouseEvent):void
{
this.isMouseDown=true;
this.mDY=mouseY;
this.mDX=mouseX;
if (inertialTimerY.running)
inertialTimerY.stop();
if (inertialTimerX.running)
inertialTimerX.stop();
}
protected function mouseUpHandle(e:MouseEvent):void
{
this.isDragging=false;
this.isMouseDown=false;
this.eTime=new Date().time;
this.eY=mouseY;
this.eX=mouseX;
this.speedY=(eY - mDY) / (eTime - sTime) * a;
this.speedX=(eX - mDX) / (eTime - sTime) * a;
if (inertialTimerY.running)
inertialTimerY.stop();
if (inertialTimerX.running)
inertialTimerX.stop();
if (Math.abs(speedY) > 20)
{
inertialTimerY.start();
}
if (Math.abs(speedX) > 20)
{
inertialTimerX.start();
}
}
private function mouseMoveHandle(e:MouseEvent):void
{
if (this.isMouseDown)
{
if (Math.abs(mouseY - mDY) > 3 || Math.abs(mouseY - mDX) > 3)
{
if (!this.isDragging)
{
sY=mouseY;
sX=mouseX
this.isDragging=true
this.sTime=new Date().time;
}
this._displayObj.y=this._displayObj.y + (mouseY - sY);
this._displayObj.x=this._displayObj.x + (mouseX - sX)
this.sY=mouseY
this.sX=mouseX
if (this._displayObj.y > 0)
{
this._displayObj.y=0;
}
else if (this._displayObj.y < -(this._displayObj.height - this.height))
{
this._displayObj.y=-(this._displayObj.height - this.height)
}
if (this._displayObj.x > 0)
{
this._displayObj.x=0;
}
else if (this._displayObj.x < -(this._displayObj.width - this.width))
{
this._displayObj.x=-(this._displayObj.width - this.width)
}
if (this._displayObj.hasOwnProperty("selectedItem"))
{
this._displayObj["selectedItem"]=null;
}
}
}
}
private function inertialMovePieceY(evt:TimerEvent):void
{
this._displayObj.y+=speedY;
speedY=speedY * 0.9;
if (this._displayObj.y > 0)
{
this._displayObj.y=0;
inertialTimerY.stop()
}
else if (this._displayObj.y < -(this._displayObj.height - this.height))
{
this._displayObj.y=-(this._displayObj.height - this.height)
inertialTimerY.stop()
}
}
private function inertialMovePieceX(evt:TimerEvent):void
{
this._displayObj.x+=speedX;
speedX=speedX * 0.9;
if (this._displayObj.x > 0)
{
this._displayObj.x=0;
inertialTimerX.stop()
}
else if (this._displayObj.x < -(this._displayObj.width - this.width))
{
this._displayObj.x=-(this._displayObj.width - this.width)
inertialTimerX.stop()
}
}
}
}
分享到:
相关推荐
ijzerenhein.FlexScrollView = require('./src/FlexScrollView');ijzerenhein.FlowLayoutNode = require('./src/FlowLayoutNode');ijzerenhein.LayoutContext = require('./src/LayoutContext');ijzerenhein....
很多朋友因项目需求问题需要在ScrollView中嵌套使用ListView或ScrollView 但是彼此的滑动事件会发生冲突,网上大多数都是计算ListView的高度来解决这个问题,但个人亲手尝试 结果ListView的Item要是过多的话ListView...
titanium ScrollView
该演示由本存储库中提供的著名的 flex ScrollView 和 TableLayout 组成。 内容 贡献 如果您喜欢这个项目并想支持它,请表现出一些爱并给它一个星星。 接触 @IjzerenHein :copyright: 2014 - 海因鲁杰斯
fview-flex 因此,IjzerenHein非常棒,毫无疑问是 Famo.us 的最佳社区组件。 这是它的包装器的开始(对于 Meteor)。... + FlexScrollView layout = " WheelLayout " direction = " Y " layoutOptions = layoutOptions
著名的弹性聊天famo.us 的聊天演示使用着名的 flex ScrollView。 该项目演示了如何使用 Web 技术创建跨平台的原生感觉聊天应用程序。 演示了以下功能: 使用着名的 flex/ScrollView 的真实大小的聊天气泡可调整大小...
ScrollView 嵌套ScrollView 事件分发问题
UGUI Super ScrollView
UGUI scrollview 插件
弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo
基于cocos2dx3.2的ScrollView改良版,paging分页部分是参考网上已有的源代码并进行改良,修复bug, indicator指示器部分是自己研发。 测试环境:mac os x (Windows平台 应该可行,需要你自己添加PagedScrollView到...
scrollView详细描述,可以更换每个scrollView上的图片,每个图片有相应的点击事件
自定义scrollview,觉得好用可用下载试试,tableview嵌套scrollview
本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家参考,具体内容如下 最近在做一个展示模块的时候遇到了一个需要实现滑动窗口并且能固定吸附距离的需求,借助UGUI的ScrollView的API以及Dotween...
在一些项目中需要用到listview嵌套在scrollview中的情况,但会碰到焦点冲突,scrollview焦点覆盖listview造成listview不能滑动,这种情况时要在scrollview中添加android:fillViewport="true"这句,并在listview中...
学习SCrollView整的小东西,实现循环翻页效果。利用停表加了自动滚动的效果。
ipad scrollview 示例 ipad scrollview 示例 ipad scrollview 示例 ipad scrollview 示例
ScrollView滑动悬停效果
ScrollView优化
SuperScrollView 无限循环列表插件 有十几个例子的实现 SuperScrollView 无限循环列表插件 有十几个例子的实现 SuperScrollView 无限循环列表插件 有十几个例子的实现