Frage Setze Element auf Scroll fest


Ich versuche, die Navigationsleiste an die Spitze zu halten, wenn der Benutzer zur Navigationsleiste hinunter scrollt und sich dann löst, wenn der Benutzer über die Navigationsleiste zurück scrollt. Ich verstehe, dass dies nur über JavaScript möglich ist. Ich bin ein Anfänger zu JavaScript, je einfacher desto besser. Das JSFIDDLE ist hier. 

Das HTML ist wie folgt:

   <section class="main">
     <div id="wrap">
        <div id="featured">
     <div class="wrap">      
  <div class="textwidget">
    <div class="cup"><img src="#""></div>
<div id="header"></div></div></div></div></div></div></div>
<div class="whiteboard">
         <h1><a href="#">HELLO GUYS</a></h1> </div>
   </div>
          <div class="bg1">
            <h2> WE ARE AN EVENTS MANAGEMENT COMPANY BASED IN LONDON. </h2></div>

Das CSS ist wie folgt:

      .main{text-align:center;}

      h1{
          -webkit-font-smoothing: antialiased;
              display:inline-block;
            font: 800 1.313em "proxima-nova",sans-serif; 
            padding: 10px 10px;
            margin: 20px 20px;
            letter-spacing: 8px;
            text-transform: uppercase;
              font-size:3.125em;
              text-align: center; 
              max-width: 606px;
      line-height: 1.45em;
      position: scroll;
          background-color:#e94f78;
          text-decoration: none;
          color:yellow;
          background-image:url;
      }

      h1 a{
        text-decoration: none;
        color:yellow;
                padding-left: 0.15em;
      }

      h2{
          -webkit-font-smoothing: antialiased;
              display:inline-block;
            font: 800 1.313em "proxima-nova",sans-serif; 
            letter-spacing: 8px;
            margin-top: 100px;
            text-transform: uppercase;
              font-size:3.125em;
              text-align: center; 
      line-height: 1.45em;
      position: scroll;
          text-decoration: none;
          color:white;
          z-index: -9999;
      }

      h2 a{
        text-decoration: none;
        color:white;
                padding-left: 0.15em;
      }

      h5{

      position: absolute;
              font-family:sans-serif; 
              font-weight:bold; 
              font-size:40px; 
              text-align: center; 
              float: right;
              background-color:#fff;
              margin-top: -80px;
              margin-left: 280px;
      }

      h5 a{

        text-decoration: none;
        color:red;
      }

      h5 a:hover{

        color:yellow;
      }

      #text1{
          -webkit-font-smoothing: antialiased;
              display:inline-block;
            font: 800 1.313em "proxima-nova",sans-serif; 
            margin: 20px 20px;
            letter-spacing: 8px;
            text-transform: uppercase;
              font-size:3.125em;
              text-align: center; 
              max-width: 606px;
      line-height: 1.45em;
      position: scroll;
          background-color:#E94F78;

      }

      #text1 a{
          color:yellow;
          text-decoration: none;
              padding-left: 0.15em;


      }

      #text1 a:hover{

          text-decoration: none;
          cursor:pointer;
      }

      .whiteboard{
          background-image:url(http://krystalrae.com/img/krystalrae-2012-fall-print-leopard-sketch.jpg);
          background-position: center;
          padding: ;
          background-color: #fff;
          z-index: 1000;
      }

      .bg{
        height:2000px;
        background-color:#ff0;
        background-image:url(http://alwayscreative.net/images/stars-last.jpg);
        position:relative;
        z-index: -9999;

      }
      .bg1{
        background-image:url(http://alwayscreative.net/images/stars-last.jpg);
        z-index: -9999;
        height:1000px;
      }
      /* Header */
      #wrap {
        margin: 0 auto;
        padding: 0;
        width: 100%;
      }

      #featured {
        background: #E94F78 url(http://www.creativityfluid.com/wp-content/themes/creativityfluid/images/img-bubbles-red.png) no-repeat top;
        background-size: 385px 465px;
        color: #fff;
        height: 535px;
        overflow: hidden;
        position: relative;
        z-index: -2;
      }


      #featured .wrap {
        overflow: hidden;
        clear: both;
        padding: 70px 0 30px;
        position: fixed;
        z-index: -1;
        width: 100%;
      }


      #featured .wrap .widget {
        width: 80%;
        max-width: 1040px;
        margin: 0 auto;
      }

      #featured h1,
      #featured h3,
      #featured p {
        color: yellow;
        text-shadow: none;
      }

      #featured h4{
        color:white;
        text-shadow:none;
      }

      #featured h4 {
        margin: 0 0 30px;
      }

      #featured h3 {
        font-family: 'proxima-nova-sc-osf', arial, serif;
        font-weight: 600;
        letter-spacing: 3px;
      }

      #featured h1 {
        margin: 0;
      }

      .textwidget{
        padding: 0;
      }

      .cup{
        margin-top:210px;
        z-index: 999999;
      }

      .container{font-size:14px; margin:0 auto; width:960px}
      .test_content{margin:10px 0;}
      .scroller_anchor{height:0px; margin:0; padding:0;background-image:url()}
      .scroller{background:#FFF;
        background-image:url(http://krystalrae.com/img/krystalrae-2012-fall-print-leopard-sketch.jpg);
       margin:0 0 10px; z-index:100; height:50px; font-size:18px; font-weight:bold; text-align:center; width:960px;}

25
2018-03-18 18:22


Ursprung


Antworten:


Sie können das mit einigen einfachen jQuery tun:

http://jsfiddle.net/jpXjH/6/

var elementPosition = $('#navigation').offset();

$(window).scroll(function(){
        if($(window).scrollTop() > elementPosition.top){
              $('#navigation').css('position','fixed').css('top','0');
        } else {
            $('#navigation').css('position','static');
        }    
});

67
2018-03-18 18:32



Ich würde mich nicht mit jQuery oder LESS beschäftigen. Ein JavaScript-Framework ist meiner Meinung nach zuviel.

window.addEventListener('scroll', function (evt) {

  // This value is your scroll distance from the top
  var distance_from_top = document.body.scrollTop;

  // The user has scrolled to the tippy top of the page. Set appropriate style.
  if (distance_from_top === 0) {

  }

  // The user has scrolled down the page.
  if(distance_from_top > 0) {

  }

});

17
2017-12-06 23:02



Es gibt einige Probleme bei der Umsetzung, auf die die ursprüngliche Antwort nicht antwortet:

  1. Das onscroll Ereignis des Fensters feuert sehr oft. Dies Impliziert, dass Sie entweder einen sehr performanten Listener verwenden müssen, oder Sie müssen den Hörer irgendwie verzögern. jQuery-Schöpfer John Resig Zustände Hier wie a Verzögerter Mechanismus kann implementiert werden, und die Gründe, warum Sie sollten TU es. Meiner Meinung nach, angesichts der heutigen Browser und Umgebungen, a performanter Zuhörer wird es auch tun. Hier ist eine Implementierung des von John Resig vorgeschlagenen Musters
  2. Die Wegposition: fixed funktioniert in css, wenn Sie die Seite nach unten scrollen und ein Element von position: static nach verschieben position: fixed, wird die Seite ein wenig "springen", weil das Dokument die Höhe des Elements "verliert". Sie können das loswerden, indem Sie die Höhe zu der hinzufügen scrollTop und ersetzen Sie die verlorene Höhe im Dokumentenkörper durch ein anderes Objekt. Sie können dieses Objekt auch verwenden, um zu bestimmen, ob das sticky-Objekt bereits verschoben wurde position: fixed und reduzieren Sie die Aufrufe an den Code rückgängig position: fixed in den ursprünglichen Zustand: Schau dir die Geige hier an
  3. Das einzige, was in Bezug auf die Leistung, die der Handler wirklich macht, ist Calling scrollTop bei jedem Anruf. Da der Intervall-gebundene Handler auch seine Nachteile hat, gehe ich so weit, hier zu argumentieren, dass Sie den Ereignis-Listener wieder an das ursprüngliche scroll Event anhängen können, damit es sich ohne viele Sorgen schnörkiger anfühlt. Sie müssen es jedoch in jedem Browser, den Sie ansprechen / unterstützen, profilieren. Sehen Sie es hier arbeiten

Hier ist der Code:

JS

/* Initialize sticky outside the event listener as a cached selector.
 * Also, initialize any needed variables outside the listener for 
 * performance reasons - no variable instantiation is happening inside the listener.
 */
var sticky = $('#sticky'),
    stickyClone,
    stickyTop = sticky.offset().top,
    scrollTop,
    scrolled = false,
    $window = $(window);

/* Bind the scroll Event */
$window.on('scroll', function (e) {
    scrollTop = $window.scrollTop();

    if (scrollTop >= stickyTop && !stickyClone) {
        /* Attach a clone to replace the "missing" body height */
        stickyClone = sticky.clone().prop('id', sticky.prop('id') + '-clone')
        stickyClone = stickyClone.insertBefore(sticky);
        sticky.addClass('fixed');
    } else if (scrollTop < stickyTop && stickyClone) {
        /* Since sticky is in the viewport again, we can remove the clone and the class */
        stickyClone.remove();
        stickyClone = null;
        sticky.removeClass('fixed');
    }
});

CSS

body {
    margin: 0
}
.sticky {
    padding: 1em;
    background: black;
    color: white;
    width: 100%
}
.sticky.fixed {
    position: fixed;
    top: 0;
    left: 0;
}
.content {
    padding: 1em
}

HTML

<div class="container">
  <div id="page-above" class="content">
    <h2>Some Content above sticky</h2>
    ...some long text...
  </div>
  <div id="sticky" class="sticky">This is sticky</div>
  <div id="page-content" class="content">
    <h2>Some Random Page Content</h2>...some really long text...
  </div>
</div>

14
2017-12-09 16:37



Hier gehts, keine Frameworks, kurz und einfach:

var el = document.getElementById('elId');
var elTop = el.getBoundingClientRect().top - document.body.getBoundingClientRect().top;

window.addEventListener('scroll', function(){
    if (document.documentElement.scrollTop > elTop){
        el.style.position = 'fixed';
        el.style.top = '0px';
    }
    else
    {
        el.style.position = 'static';
        el.style.top = 'auto';
    }
});

7
2018-06-08 03:41



Sie möchten verwenden jQuery Wegpunkte. Es ist ein sehr einfaches Plugin und erreicht genau das, was Sie beschrieben haben.

Einfachste Implementierung

    $('.thing').waypoint(function(direction) {
  alert('Top of thing hit top of viewport.');
});

Sie müssen einige benutzerdefinierte CSS festlegen, um genau dort festzulegen, wo es hängen bleibt, das ist jedoch normal für die meisten Möglichkeiten, es zu tun.

Diese Seite zeigt Ihnen alle Beispiele und Informationen, die Sie benötigen.

Für zukünftige Referenz ein Beispiel für das Stoppen und Starten ist Diese Internetseite. Es ist ein "in der Wildnis" Beispiel.


5
2017-12-06 19:53



Sie können dies auch mit CSS tun.

benutz einfach position:fixed; für was Sie festgelegt werden möchten, wenn Sie nach unten scrollen.

Sie können hier einige Beispiele haben:

http://davidwalsh.name/demo/css-fixed-position.php

http://demo.tutorialzine.com/2010/06/microtut-how-css-position-works/demo.html


2
2017-12-05 07:09



Sie können zur LESS CSS Website gehen http://lesscss.org/

Ihr andockbares Menü ist leicht und funktioniert gut. Die einzige Einschränkung besteht darin, dass der Effekt erst nach Abschluss der Bildlauffunktion erfolgt. Machen Sie einfach eine Ansichtsquelle, um die js zu sehen.


1
2018-03-18 18:36



window.addEventListener("scroll", function(evt) {
    var pos_top = document.body.scrollTop;   
    if(pos_top == 0){
       $('#divID').css('position','fixed');
    }

    else if(pos_top > 0){
       $('#divId').css('position','static');
    }
});

1
2017-12-10 12:09



Plain Javascript Lösung (DEMO):

<br/><br/><br/><br/><br/><br/><br/>
<div>
  <div id="myyy_bar" style="background:red;"> Here is window </div>
</div>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>


<script type="text/javascript">
var myyElement = document.getElementById("myyy_bar"); 
var EnableConsoleLOGS = true;           //to check the results in Browser's Inspector(Console), whenever you are scrolling
// ==============================================



window.addEventListener('scroll', function (evt) {
    var Positionsss =  GetTopLeft ();  
    if (EnableConsoleLOGS) { console.log(Positionsss); }
    if (Positionsss.toppp  > 70)    { myyElement.style.position="relative"; myyElement.style.top = "0px";  myyElement.style.right = "auto"; }
    else                            { myyElement.style.position="fixed";    myyElement.style.top = "100px";         myyElement.style.right = "0px"; }
});



function GetOffset (object, offset) {
    if (!object) return;
    offset.x += object.offsetLeft;       offset.y += object.offsetTop;
    GetOffset (object.offsetParent, offset);
}
function GetScrolled (object, scrolled) {
    if (!object) return;
    scrolled.x += object.scrollLeft;    scrolled.y += object.scrollTop;
    if (object.tagName.toLowerCase () != "html") {          GetScrolled (object.parentNode, scrolled);        }
}

function GetTopLeft () {
    var offset = {x : 0, y : 0};        GetOffset (myyElement.parentNode, offset);
    var scrolled = {x : 0, y : 0};      GetScrolled (myyElement.parentNode.parentNode, scrolled);
    var posX = offset.x - scrolled.x;   var posY = offset.y - scrolled.y;
    return {lefttt: posX , toppp: posY };
}
// ==============================================
</script>

0
2017-09-23 10:54