AS3,通过拖动内容滚动内容。喜欢在手机上没有滚动条。闪

时间:2011-02-21 03:56:03

标签: flash actionscript-3 scroll drag

我试图通过拖动内容来弄清楚如何在动作脚本项目中滚动内容。这将与使用触摸手势移动内容的手机上看到的功能相同。我想用鼠标做这个。我不想要滚动条。我想用鼠标拖动一个影片剪辑来滚动影片剪辑中的内容。

有人有任何提示或网址可供我查看吗?

感谢 CP

3 个答案:

答案 0 :(得分:2)

实际上你也可以尝试在这里使用startDrag

Startdrag有两个可选参数: lockcenter(拖动后将movieclip居中到鼠标),一个布尔值 和边界,用于定义可以将其拖入的区域,即矩形。

因此,如果要垂直滚动,请分别使用Rectangle:

movie.startDrag(false, new Rectangle(m.x, -10000, 0, 2 * 10000));

这里我写了-10000作为矩形的y坐标和2 * 10000的高度。这是为了确保您可以拖动它,必要时更改这些数字。

拖动的小代码如下所示:

movie.addEventListener("mouseDown", md);

function md(evt:*):void
{
    movie.startDrag(false, new Rectangle(m.x, -10000, 0, 2 * 10000));
    stage.addEventListener("mouseUp", mu);
}

function mu(evt:*):void
{
    movie.stopDrag();
    stage.removeEventListener("mouseUp", mu);
}

也许这符合您的需求。

答案 1 :(得分:1)

子弹的想法:

  • on mouse_down开始切换
  • 退出mouse_up上的切换
  • 如果切换开启,则让mouse_move注意拖动边界
  • 如果鼠标在切换为真时位于边界的上方,右侧,左侧或下方 - 请勿让鼠标再移动,但要使滚动区域向上/向下或向左/向右移动

希望这有助于/有意义。

答案 2 :(得分:0)

这是让你入门的东西。我现在正在制定边界。几分钟就可以了。这假设你在舞台上有一个movieclip,在我的例子中它是一个红色框(你的假定内容),实例名称为“box”。如果您愿意,可以将此概念扩展为在容器内滚动内容。

编辑有一些意外行为,其中框被卡在边界处。这个想法还不是很正确,但我认为它在正确的道路上。我还在修修补补。 :)

stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, calculatePosition);

var scrolling:Boolean;
var scrollMax = this.stage.stageHeight;

function onDown(evt:MouseEvent = null):void
{
    scrolling = true;
}

function onUp(evt:MouseEvent = null):void
{
    scrolling = false;
}

function calculatePosition(evt:Event)
{
    if(scrolling)
    {
        var percent = getPercentageFromNumber(stage.mouseY, scrollMax, 0);

        var pos = getNumberFromPercentage(percent, scrollMax, 0);

        if(box.y + box.height < scrollMax && box.y > 0)
        {
            box.y = pos;
        }
        else
        {
            onUp();
        }
    }
}

function getPercentageFromNumber(val:Number, max:Number, min:Number = 0):Number
{
    var percent:Number = (val - min) / (max - min) * 100;

    return percent;
}

function getNumberFromPercentage(perc:Number, max:Number, min:Number = 0):Number
{
    var absolute:Number = (perc * (max - min) / 100) + min;

    return absolute;
}