我在Actionscript 3中编写了一个程序,该程序包含一个Slider,用于显示一年中的周和月,当您以“第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。就像我说的,我知道这不起作用,但我不知道该怎么做才能解决它。
答案 0 :(得分: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
答案 1 :(得分:0)
假设您的滑块有12个月,每月4周:
<强>个月:强>
var months:int = (int)(dateSlider.value / 4);
<强>周强>
var weeks:int = (dateSlider.value % 4) + 1;
Flash示例:
如果您有dateSlider
Flash组件:
您可以更新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);
}
Flex示例:
<?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。
明确计算日期时间间隔将是有益的。