2017-08-14 1 views
1

Je veux un div suivre que vous faites défiler lorsque vous êtes sur un écran plus large que 991. Sur une taille d'écran plus petite je veux la div fixe. Et je veux que le code javascript soit actualisé chaque fois que quelqu'un charge ou redimensionne la page.Div suivre que vous faites défiler sur l'écran des ordinateurs de bureau et est fixe sur l'écran mobile

Voici mon code (ce n'est pas sec ...).

Mon problème est quand je redimensionner la fenêtre (écran de bureau -> écran mobile -> écran de bureau ...): 1 - sur écran mobile je ne peux pas aller en bas de la page 2 - sur le bureau écran j'ai un problème quand je fais défiler la page

//when the page is load and the window resize detect if it's a smallscreen 
    var smallscreen = true; 
    $(window).on("resize load", function() { 
    if ($(window).width() > 991) { 
     smallscreen = false; 
    } 
    else { 
     smallscreen = true; 
    }; 

    //if it's not a small screen activate the scrolling 
    if (smallscreen == false) { 
     $.fn.followTo = function (pos) { 
     var $this = this, 
      $window = $(window); 

     $window.scroll(function(e){ 
      if ($window.scrollTop() > pos) { 
      $this.css({ 
       position: 'absolute', 
       top: pos 
      }); 
      } 
      else { 
      $this.css({ 
       position: 'fixed', 
       top: 180 
      }); 
      }; 
     }); 
     }; 
     $('#checkout_validation').followTo(400); 
    } 
    else { 
     $.fn.followTo = function (pos) { 
     var $this = this, 
      $window = $(window); 

     $window.on("resize scroll load", function(e){ 
      if ($window.scrollTop() > pos) { 
      $this.css({ 
       position: 'initial', 
       width: '100%', 
       top: 0 
      }); 
      } 
      else { 
      $this.css({ 
       position: 'initial', 
       width: '100%', 
       top: 0 
      }); 
      }; 
     }); 
     }; 
     $('#checkout_validation').followTo(0); 
    }; 
    }); 
+1

Vous pouvez supprimer le code pour smallerscreen et simplement utiliser le CSS pour le positionner. Et pour le bureau, déplacez la fonction '$ .fn.followTo' sur' $ (window) .on ("resize load" '.) De même, déplacez d'autres codes aussi, cela vous donnera une idée claire de ce qui ne fonctionne pas .. – iMatoria

+0

@ iMatoria Merci pour votre réponse Si je supprime le code smallerscreen, le div défilera toujours si je redimensionne la fenêtre – Blueone

+1

C'est ce que vous devez gérer en utilisant CSS, vous pouvez ajouter une classe en cas de smallscreen et d'utiliser CSS. est une façon très générale d'implémenter le code/html mobile – iMatoria

Répondre

0

Voici mon code de travail. Merci à @ Micatoria de l'avoir séché.

//when the page is load and the window resize detect if it's a smallscreen 
var smallscreen = true; 

$.fn.followTo = function(pos) { 
    var $this = this, 
     $window = $(window); 

    $window.on("resize scroll", function(e) { 
     function positionByScreen(positionForBiggerScreen, topOffsetForBiggerScreen) { 
      if (smallscreen == false) { 
       //alert('bigcreen scroll end'); 
       $this.css({ 
        position: positionForBiggerScreen, 
        top: topOffsetForBiggerScreen 
       }); 
      } else { 
       //alert('smallscreen no scroll end '); 
       $this.css({ 
        position: 'inherit', 
        top: 0 
       }); 
      } 
     } 

     if ($window.scrollTop() > pos) { 
      positionByScreen("absolute", pos); 
     } else { 
      positionByScreen("fixed", 180); 
     }; 
    }); 
}; 

$(window).on("resize load", function() { 
    smallscreen = !($(window).width() > 991); 

    //if it's not a small screen activate the scrolling 
    $('#checkout_validation').followTo(smallscreen ? 0 : 400); 

    //var d = document.getElementById("checkout_validation"); 
    //d.className += " otherclass"; 
}); 
+0

@iMatoria Je viens de trouver un problème dans le code Quand je charge la page pour la première fois mobile le paramètre element est (position: fixed; top: 180px;) et j'ai besoin de redimensionner ou de faire défiler pour que les paramètres corrects s'appliquent.J'ai essayé d'ajouter "load" sur la ligne 5 mais ça ne marche pas. activé ("redimensionner le défilement", fonction (e)) – Blueone