目前共有15篇帖子。 内容转换:不转换▼
 
点击 回复
336 14
【思路】日历右侧活动列表实现持续时间大于1天的活动块状显示
一派护法 十九级
1楼 发表于:2010-11-10 21:37
一派护法 十九级
2楼 发表于:2010-11-10 21:39

ot.showing=Array();

先建立数组。假设当前遍历到2010年11月10日,对应的表格号(var:itemid)是17。该日期下有一个长3天的活动,也就是持续到12日,那么当前遍历到10日是该活动就没有结束,那么就不显示右圆角。

一派护法 十九级
3楼 发表于:2010-11-10 21:46

此时把活动id和该活动在表格中的显示顺序记录入数组ot.showing。

循环段结束,接下来遍历11日。11日中继承活动10日的那个长3天的活动(xml中已返回),此时遍历一下数组:

<?js

for(i=0;i<ot.showing.length;i++){

  dd=ot.showing[i][0]; //活动id

  ddd=ot.showing[i][1]; //表格中的显示顺序

}

?>

一派护法 十九级
4楼 发表于:2010-11-10 21:46
思路又陷入混乱了……整理一下!
一派护法 十九级
5楼 发表于:2010-11-10 21:55

简单写一下:当变量j在ot.showing中存在记录时,用空li标签霸占当前的位置,然后再输出当前活动的li标签,假设那个长3日的活动(以后叫x活动)在10日表格中的显示序号为1,那么在11号表格中:

若11号除了x活动外一个活动都没有,那么var:activesnum就等于1,遍历过程如下:

for (j=0;j<activesnum;j++,amn++){

第一次遍历,var:j等于0,此时刚好指向x活动。由于x活动在10号中的显示序号为1,当前序号(var:j)是0,那么10号就不能显示到……太复杂了,程序中根本无法实现,算了,改用换数组的方法。

一派护法 十九级
6楼 发表于:2010-11-10 22:04

换数组的方法具体是:

ajax返回的xml中的根节点下有很多日期节点,各日期节点下有很多活动节点。先把这些活动节点遍历进入数组,等待排序:

var dn=Array(); //活动节点

dn[i]=Array(); //dn[i]中i为表格号,值为各活动

假设dn[表格号]的数据格式是:Array("活动数据组","活动数据组",...))

若dn[17]==Array(Array("标题","内容"),Array("22","33"));

主动把数组位置调换一下,再遍历数组就可以了。

一派护法 十九级
7楼 发表于:2010-11-10 22:38

回复:6楼

我改在用php-ajax服务器端排序了

一派护法 十九级
8楼 发表于:2010-11-11 13:24
//排序
   foreach ($stfed as $i=>$v){
    //$stfed:昨天的全部活动,$stf:今天的全部活动
    //$i:活动编号,$v:活动显示序号
    if (!is_numeric($v)) continue; //若活动显示序号不是数字
    //若昨天的活动编号今天有,则对齐
    //$i就是昨天的活动编号,首先判断今天有没有这个活动,没有的话就continue
    $Is=arraygetid($stf,$i); //键名
    if ($Is<0) continue; //若今天没有这个活动
    $IS=$str[$Is]; //今天这个活动的显示序号
    //$v:昨天这个活动的显示序号
    
    //对齐
   }
一派护法 十九级
9楼 发表于:2010-11-11 13:48
//排序
   foreach ($stfed as $i=>$v){ //★★这个最好再换一下变量★★
    //$stfed:昨天的全部活动,$stf:今天的全部活动
    //$i:活动编号,$v:活动显示序号
    if (!is_numeric($v)) continue; # 若活动显示序号不是数字
    //若昨天的活动编号今天有,则对齐
    # $i就是昨天的活动编号,首先判断今天有没有这个活动,没有的话就continue
    $Is=arraygetid($stf,$i); # 键名 //★★可能是这个出错了★★
    if ($Is<0) continue; # 若今天没有这个活动
    $IS=intval($str[$Is]); # 今天这个活动的显示序号
    //$v:昨天这个活动的显示序号
    
    
    //对齐
    # 检测今天活动的正确位置是否被其他活动占了
    if (isset($std[$v])){
     # 占了就交换位置
     $a=$std[$IS];
     $b=$std[$v];
     $std[$v]=$a;
     $std[$IS]=$b;
     //$debug.=$IS."||||".$v."||||".$dstr;
     //$debug.=sExplode("|",$stfed); //★有误★
    }else{
     # 没占
    }
   }
一派护法 十九级
10楼 发表于:2010-11-11 13:48
算了,没时间了
一派护法 十九级
11楼 发表于:2010-11-11 13:50
时间真是太少了!
一派护法 十九级
12楼 发表于:2010-11-11 22:12
第一步成功了!
一派护法 十九级
13楼 发表于:2010-11-11 22:12
高兴ing!
一派护法 十九级
14楼 发表于:2010-11-11 22:13
//排序
   foreach ($stfed as $i=>$v){
    /*
     $stfed:昨天的全部活动,$stf:今天的全部活动
     $i:昨天的活动显示序号,$v:昨天的活动编号
     若昨天的活动编号今天有,则对齐
     $i就是昨天的活动编号,首先判断今天有没有这个活动,没有的话就continue
    */
    $Is=arraygetid($stf,$v); //获得今天显示该活动的序号(错误的)
    if ($Is==-1){
     //$v:昨天这个活动的显示序号
     continue; # 若今天没有这个活动
    }
    
    //对齐
    # 检测今天活动的正确位置是否被其他活动占了
    if (isset($std[$i])){
     //占了就交换位置
     $a=$std[$Is]; # 今天活动的错误位置的活动数据
     $b=$std[$i]; # 今天活动的正确位置的活动数据
     $std[$i]=$a;
     $std[$Is]=$b;
     # 纠正$stf数组(防止第三日的活动错位),使各日的活动与第一天平行
     $a=$stf[$Is];
     $b=$stf[$i];
     $stf[$i]=$a;
     $stf[$Is]=$b;
    }else{
     //没占
    }
   }
一派护法 十九级
15楼 发表于:2010-11-11 22:13
接下来是//没占

回复帖子

内容:
抱歉,系统已内测完毕,本吧不能发帖
抱歉,系统已内测完毕,本吧不能发帖
用户名: 您目前是匿名发表
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:336 回复数:14
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2010-11-11 22:13
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。