2

我正在用 Actionscript 3 编写一个程序,其中涉及一个滑块,当您以“第 2 周第 3 周”或“第 8 个月第 2 周”的格式向右滑动时,它会显示一年中的周数和月数。我做了几个月这样的事情:function monthHandler(){

var a:Number = ((Math.ceil(aSlider.value/4))+1);
monthLabel.text = "Month" + String(a);

}

但是对于同一个滑块(aSlider),我想每个月显示几周,最多 4 周。我知道我基本上需要设置一个数字阈值;值 1-4 将显示周数:1-4,但值 5-8 也必须显示周数 1-4。

我知道我可以通过使用 if() 循环的 crapton 来做到这一点,但我对编程比较陌生,所以我假设有一种更有效的方法来做到这一点,而我只是不知道。我环顾网络以检查数字的倍数并设置数字阈值,但似乎没有什么适合我的问题。

几周的当前代码是:

function weekHandler(){
var b:Number = ((Math.ceil(aSlider.value/12))+1);
weekLabel.text = "Week:" + String(b);
}

当我将滑块滑过物体的四分之一时,所有这些都会显示 1-4。就像我说的,我知道这不起作用,但我不知道该怎么做才能解决它。

4

2 回答 2

1

基本上,我认为你想要的代码是:

var a:Number = (Math.ceil(aSlider.value) % 4) +1;
weekLabel.text = "Week" + String(a);

a % b = a 的余数除以 b..

否则你不需要很多'if()'来计算它。

你可以使用(a - Math.floor(a/b)*b)<= 但不要使用它,使用a%b

于 2012-07-03T05:10:37.180 回答
0

假设您的滑块有 12 个月,每月 4 周:

月份:

var months:int = (int)(dateSlider.value / 4);

周数:

var weeks:int = (dateSlider.value % 4) + 1;

闪存示例:

闪光滑块

如果您有dateSliderFlash 组件:

闪日期滑块

您可以更新dateText标签,例如:

import fl.events.SliderEvent;

dateSlider.addEventListener(SliderEvent.CHANGE, sliderChangeHandler);

function sliderChangeHandler(event:SliderEvent):void
{
    dateText.text = "Month: " + (int)(event.value / 4) + " " +
                    "Week: " + ((event.value % 4) + 1);
}


弹性示例:

月-0 第 6 个月 12 月

<?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">

    <s:layout>
        <s:VerticalLayout />
    </s:layout>

    <s:Label text="Month: {(int)(dateSlider.value / 4)} Week: {(dateSlider.value % 4) + 1}" />

    <s:HSlider id="dateSlider"
               maximum="{(13 * 4) - 1}"
               snapInterval="1"
               stepSize="1" />

</s:Application>

应该注意的是,这种对日期的解释似乎是初步的,因为每月的实际周数是 4.34812。

明确计算日期时间跨度将是有益的。

于 2012-07-03T05:12:38.983 回答