Function Corona SDK ScrollView滚动到触发器元素的量

Function Corona SDK ScrollView滚动到触发器元素的量,function,lua,scrollview,coronasdk,corona-storyboard,Function,Lua,Scrollview,Coronasdk,Corona Storyboard,我有一个“逻辑”类型的问题,我正在使用Corona SDK 我正在使用ScrollView小部件,我想知道是否可以创建一个函数或东西来设置“y”值,当滚动到或超过该值时,会根据滚动方向触发元素(顶部导航栏)淡入或淡出 以我为例: 你有你的滚动视图,你向下滚动(y)30px。元素位于alpha=0并开始淡入,当达到40px时,它是alpha=1。同样适用于向上滚动,但相反,alpha=1在40px和alpha=0在30px 如果我可以让元素(顶部导航栏)淡入或淡出,当你从任意方向滚动设置“y”数量

我有一个“逻辑”类型的问题,我正在使用Corona SDK

我正在使用ScrollView小部件,我想知道是否可以创建一个函数或东西来设置“y”值,当滚动到或超过该值时,会根据滚动方向触发元素(顶部导航栏)淡入或淡出

以我为例:

你有你的滚动视图,你向下滚动(y)30px。元素位于
alpha=0
并开始淡入,当达到40px时,它是
alpha=1
。同样适用于向上滚动,但相反,
alpha=1
在40px和
alpha=0
在30px

如果我可以让元素(顶部导航栏)淡入或淡出,当你从任意方向滚动设置“y”数量时,而不是一次全部淡入或淡出,那就太好了。因此,如果只滚动35px,元素位于
alpha=5


这是来自Corona SDK示例:

local widget = require( "widget" )

-- ScrollView listener
local function scrollListener( event )

    local phase = event.phase
    if ( phase == "began" ) then print( "Scroll view was touched" )
    elseif ( phase == "moved" ) then print( "Scroll view was moved" )
    elseif ( phase == "ended" ) then print( "Scroll view was released" )
    end

    -- In the event a scroll limit is reached...
    if ( event.limitReached ) then
        if ( event.direction == "up" ) then print( "Reached top limit" )
        elseif ( event.direction == "down" ) then print( "Reached bottom limit" )
        elseif ( event.direction == "left" ) then print( "Reached left limit" )
        elseif ( event.direction == "right" ) then print( "Reached right limit" )
        end
    end

    return true
end

-- Create the widget
local scrollView = widget.newScrollView
{
    top = 100,
    left = 10,
    width = 300,
    height = 400,
    scrollWidth = 600,
    scrollHeight = 800,
    listener = scrollListener
}

-- Create a image and insert it into the scroll view
local background = display.newRect(160, 240, 320, 480)-- display.newImageRect( "assets/scrollimage.png", 768, 1024 )
background:setFillColor(1, 0, 0)
scrollView:insert( background )
您可以看到scrollview小部件有达到其极限的事件

local widget = require( "widget" )

-- ScrollView listener
local function scrollListener( event )
    if event.phase == "moved" then
        local x, y = event.target:getContentPosition()
        if y > 40 then 
            print("****")
        end 
    end 
    return true
end
这里有一个简化的例子。这里我使用了:getContentPosition(),它返回scrollview的x和y位置

向下滚动时,scrollview内容将向上移动,y位置将为负值。为了刷新,您可能会查找一个正数,scrollview会被下拉到其容器的上边缘下方。要查找scrollview中的内容何时接近scrollview容器的顶部,您需要查找负数

下面的示例定义了0、-40和-80像素处的一些路径点。当到达新的航路点时,它将打印航路点的索引

local waypoints = {0, -40, -80}
local currentWayPoint = 0

-- ScrollView listener
local function scrollListener( event )
   if event.phase == "moved" then
        local x, y = event.target:getContentPosition()
        local newWayPoint = -1
        for i = 1, #waypoints do 
            local waypoint = waypoints[i]
            -- print(waypoint, y, i)
            if waypoint > y then
                newWayPoint = i
            end 
        end 
        if newWayPoint ~= currentWayPoint then 
            currentWayPoint = newWayPoint
            print( currentWayPoint )
        end 
    end 
    return true
end

在这里,如果向下拖动,终端应显示-1,然后向上拖动超过每个路径点值(每40个像素)时,终端应显示1、2和3。您可以添加一条if语句来检查航路点值是否发生变化,然后执行一些操作

我试过这个,但它不适用于“如果y>40那么”。它似乎只适用于“如果y<40那么”,但它仍然不是一个完美的解决方案……不管你输入什么数字,它仍然会立即生效。@benlevywebdesign是的,我也尝试过。和你做的一样,它并不完美。它在电晕限制方面是有缺陷的,但从其他方面看,它工作得不错!我注意到在开始拖动和终端中显示的第一个scrollview位置事件之间有延迟。不知道是什么原因造成的。