2013-05-26 12 views
14

Utilizzo il plug-in jquery fullCalendar.Modifica dell'ordine degli eventi nell'agenda FullCalendar Vista giornaliera

Sto cercando di rendere i miei eventi nell'agenda. La vista del giorno si presenta da sinistra a destra ordinata per ora di inizio.

In sostanza, voglio rimuovere l'impilamento degli eventi, quindi un evento dall'11 settembre verrà visualizzato accanto a un evento 12-4 anziché sopra di esso.

Sembra che ci siano alcune funzioni associate all'ordinamento degli eventi.

function segCmp(a, b) { 
    var tryCmp = (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start); 
    if (tryCmp == 0) 
     return (a.event.rowId - b.event.rowId); 
    return tryCmp; 
} 

function segsCollide(seg1, seg2) { 
    return seg1.end > seg2.start && seg1.start < seg2.end; 
} 

// event rendering utilities 
function sliceSegs(events, visEventEnds, start, end) { 
    var segs = [], 
     i, len=events.length, event, 
     eventStart, eventEnd, 
     segStart, segEnd, 
     isStart, isEnd; 
    for (i=0; i<len; i++) { 
     event = events[i]; 
     eventStart = event.start; 
     eventEnd = visEventEnds[i]; 
     if (eventEnd > start && eventStart < end) { 
      if (eventStart < start) { 
       segStart = cloneDate(start); 
       isStart = false; 
      }else{ 
       segStart = eventStart; 
       isStart = true; 
      } 
      if (eventEnd > end) { 
       segEnd = cloneDate(end); 
       isEnd = false; 
      }else{ 
       segEnd = eventEnd; 
       isEnd = true; 
      } 
      segs.push({ 
       event: event, 
       start: segStart, 
       end: segEnd, 
       isStart: isStart, 
       isEnd: isEnd, 
       msLength: segEnd - segStart 
      }); 
     } 
    } 
    return segs.sort(segCmp); 
} 


// event rendering calculation utilities 
function stackSegs(segs) { 
var levels = [], 
i, len = segs.length, seg, 
j, collide, k; 
    for (i=0; i<len; i++) { 
     seg = segs[i]; 
     j = 0; // the level index where seg should belong 
     while (true) { 
      collide = false; 
      if (levels[j]) { 
       for (k=0; k<levels[j].length; k++) { 
        if (segsCollide(levels[j][k], seg)) { 
         collide = true; 
         break; 
        } 
       } 
      } 
      if (collide) { 
       j++; 
      }else{ 
       break; 
      } 
     } 
     if (levels[j]) { 
      levels[j].push(seg); 
     }else{ 
      levels[j] = [seg]; 
     } 
    } 
    return levels; 
} 

Qualche idea?

+2

Potete per favore creare un jsfiddle per questo. Una domanda, in un ordine del giorno. Guarda le ore del giorno che arrivano verticalmente a sinistra e gli eventi si susseguono l'uno nell'altro. Ma vuoi che gli eventi siano uno dopo l'altro da sinistra a destra, allora devi anche cambiare il tempo in orizzontale. La mia comprensione è corretta o mi manca qualche punto? –

risposta

1

L'orientamento delle fasce orarie nel calendario è dall'alto verso il basso, non da sinistra verso destra. Non credo sia possibile cambiare questo orientamento.

+0

questo non è un tipo di risposta che sto trovando. – ripa

1

C'è un'opzione che è possibile passare a fullCalendar() che disabiliterà la sovrapposizione di eventi nell'agenda Giorno e nell'agendaVisualizza è slotEventOverlap: false.

Problemi correlati