2010-10-28 5 views
0

Je travaille sur un module d'interaction de calendrier. le calendrier affiche les jours réservés. un intervalle de réservation est de 7 jours. J'ai mis en place via javascript que planer un jour ajoute une classe et auto-survole 3 jours avant et 3 jours après ce jour aussi pour visualiser le paramètre de l'intervalle de 7 jours qui se classe là aussi. maintenant je suis coincé avec le problème suivant.Besoin d'aide pour une détection de collision via jQuery

si je planer un jour et l'un des prev. 3 ou 3 suivant fait déjà partie d'une réservation Je veux ajouter la différence à l'autre bout de l'intervalle de 7 jours. un exemple:

  1. i passe la souris jour 12
  2. alors l'intervalle ressemble xxx12xxx
  3. i déplacer le curseur sur 13
  4. l'intervalle ressemble xxx13xxx
  5. si je vais maintenant passer le curseur sur 14 alors 15,16,17 serait marqué aussi, mais que se passe-t-il si 16 est le point de départ d'une réservation? alors dans les deux cas, j'ai besoin de connaître l'identifiant des extrémités gauche et droite car ce sont des valeurs que je dois envoyer via la forme. comment les obtenir?
  6. comment faire en sorte que la différence (16 et 17) soit ajoutée à l'extrémité gauche afin qu'elle ressemble à xxxxx14x?

la seule façon que je vois pour avoir un commutateur 7 cas avec un énorme bloc de code. mais de toute façon je sens qu'il y avait un moyen plus facile.

pouvez-vous probablement me montrer?

merci d'avance pour la lecture!

concernant

Répondre

0

Lorsque vous survolez un jour, vous avez besoin obviuosly de faire une analyse des jours pour accomplir votre tâche autour. Voici comment j'approcherais ceci (en pseudo-code):

on day hover{ 
    determine the base starting date. 
    start day = current day.value - 3 
    end day = start day + 7 

    There's several scenerios to deal with: 
     all seven days are available. 
     some days between the start day and the current day are reserved, but enough are availabel after the end day to allow for choosing 7 days 
     some days between the current day and the end day are reserved, but enough are available before the start day to allow for selecting 7 days 
     There some days are reserved between both the start day and current day as well as the curent day and end day (in which case, no selection can be made). 

    So, you need to determine which case you're dealing with and adjust the 7 day span accordingly. 

    set a boolean to handle checking logic. 
    hasSevenDayAvailablility = true 

    test the first instance. 
    iterate over each day and see if any are currently reserved. 
    for(start day to end day as day){ 
     if(day is reserved){ 
      hasSevenDayAvailability = false 
     } 
    } 

    At this point, you know whether or not you even need to modify the seven day window. 
    if(!hasSevenDayAvailability){ 
     Check for no availability first (as this is the easiest to check) Since the only reservation options are in blocks of 7, we only have to check the start day and end day. 
     if(start day is reserved && end day is reserved){ 
      a reservation window is unavailable, so do nothing. 
     } else { 
      if(the start day is reserved){ 
       increment the start day until you reach the current day and test for 7 day availability window 
       for(start day to current day as day){ 
        if(day is available && day + 7 is available){ 
         start day = day 
         end day = start day + 7 
         hasSevenDayAvailability = true 
         break 
        } 
       } 
      } else { 
       decrement the end day until you reach the current day and test for 7 day availability window 
       for(end day to current day step -1 as day){ 
        if(day is available && day - 7 is available){ 
         start day = day - 7 
         end day = day 
         hasSevenDayAvailability = true 
         break 
        } 
       } 
      } 
     } 
    } 

    Finally, if there is a seven day availability window, use the calculated start and end days to set classes as needed. 
    if(hasSevenDayAvailability){ 
     for(start day to end day as day){ 
      day.addClass(highlighted) 
     } 
    } 
} 
+0

Vous devriez formater votre message de manière à ce que seul le code actuel ait quatre espaces devant lui. – treeface

Questions connexes