एक बार स्क्रॉल करने के बाद मैं स्क्रीन के शीर्ष पर एक दिव्य छड़ी कैसे बना सकता हूं?


305

मैं एक div बनाना चाहूंगा, जो सामग्री के एक ब्लॉक के नीचे स्थित है, लेकिन जब पृष्ठ को उसकी शीर्ष सीमा से संपर्क करने के लिए पर्याप्त स्क्रॉल किया गया हो, तो वह जगह में तय हो जाता है और पृष्ठ के साथ स्क्रॉल करता है।


5
जून 2014 तक, स्टिकी-किट jQuery प्लगइन सबसे आसान विकल्पों में से एक है, जो प्रवेश और सुविधाओं के बहुत कम अवरोध प्रदान करता है। यदि आप जल्दी से मैदान से बाहर निकलने के लिए एक आसान तरीका ढूंढ रहे हैं तो शुरू करने के लिए शानदार जगह।
user456584


32
position: sticky; top:0;जनवरी 2017 में सीएसएस सबसे अधिक ब्राउज़रों में काम करता है।
कॉलिन का हार्ट हार्ट

9
पवित्र बकवास, वह position: sticky;चीज़ जादुई है।
tscizzle

जवाबों:


259

आप बस सीएसएस का उपयोग कर सकते हैं, अपने तत्व को नियत कर सकते हैं :

.fixedElement {
    background-color: #c0c0c0;
    position:fixed;
    top:0;
    width:100%;
    z-index:100;
}

संपादित करें: आपके पास तत्व पूर्ण स्थिति के साथ होना चाहिए, एक बार स्क्रॉल ऑफ़सेट तत्व तक पहुंचने के बाद, इसे नियत में बदल दिया जाना चाहिए, और शीर्ष स्थिति को शून्य पर सेट किया जाना चाहिए।

आप स्क्रॉलटॉप फ़ंक्शन के साथ दस्तावेज़ के शीर्ष स्क्रॉल ऑफ़सेट का पता लगा सकते हैं :

$(window).scroll(function(e){ 
  var $el = $('.fixedElement'); 
  var isPositionFixed = ($el.css('position') == 'fixed');
  if ($(this).scrollTop() > 200 && !isPositionFixed){ 
    $el.css({'position': 'fixed', 'top': '0px'}); 
  }
  if ($(this).scrollTop() < 200 && isPositionFixed){
    $el.css({'position': 'static', 'top': '0px'}); 
  } 
});

जब स्क्रॉल ऑफ़सेट 200 तक पहुंच गया, तो तत्व ब्राउज़र विंडो के शीर्ष पर चिपक जाएगा , क्योंकि निर्धारित के रूप में रखा गया है।


4
कि मैं क्या करने जा रहा हूँ के लिए नहीं है। मुझे पृष्ठ के शीर्ष के नीचे 200px पर शुरू होने वाला तत्व (अन्य सामग्री के लिए कमरे की अनुमति देने के लिए) चाहिए और फिर एक बार उपयोगकर्ता स्क्रॉल करने के बाद शीर्ष पर स्थिर हो जाएगा।
evanr

3
आपका संपादन वास्तव में अब प्रश्न की जरूरतों को पूरा करता है, लेकिन जब पृष्ठ फिर से शीर्ष पर वापस स्क्रॉल करता है, तो आपको अभी भी एक समस्या है। आप तत्व स्क्रॉलटॉप पर पहुंचने के बाद इसे कहीं स्टोर कर सकते हैं, और जब पेज उस स्थिति को फिर से हिट करता है (जब ऊपर की ओर स्क्रॉल करता है) तो सीएसएस को डिफ़ॉल्ट रूप से बदल देता है ... शायद एक .toggleClass के साथ ऐसा करने के लिए बेहतर है ...
सैंडर

9
जब मैं खिड़की के शीर्ष पर वापस स्क्रॉल किया जाता है, तो यह निश्चित रूप से बहुत अधिक होता है, लेकिन जब मुझे निश्चित स्थिति को हटाना पड़ता है। if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
डेरिक पेटज़ोल्ड

1
@DerrickPetzold मैंने जवाब में कहा कि, बहुत महत्वपूर्ण सामान :)
मारियो '

1
new exampleआपके द्वारा दिया गया लिंक इतना साफ और स्पष्ट है कि मैं इसे देख भी नहीं सकता! -_-
सोहैबी

245

आपने इस उदाहरण को Google कोड के समस्या पृष्ठ पर देखा है और हाल ही में स्टैक ओवरफ्लो के संपादन पृष्ठ पर देखा है।

जब आप बैक अप स्क्रॉल करते हैं तो सीएमएस का उत्तर स्थिति को वापस नहीं देता है। यहां स्टैक ओवरफ्लो से बेशर्म चोरी कोड है:

function moveScroller() {
    var $anchor = $("#scroller-anchor");
    var $scroller = $('#scroller');

    var move = function() {
        var st = $(window).scrollTop();
        var ot = $anchor.offset().top;
        if(st > ot) {
            $scroller.css({
                position: "fixed",
                top: "0px"
            });
        } else {
            $scroller.css({
                position: "relative",
                top: ""
            });
        }
    };
    $(window).scroll(move);
    move();
}
<div id="sidebar" style="width:270px;"> 
  <div id="scroller-anchor"></div> 
  <div id="scroller" style="margin-top:10px; width:270px"> 
    Scroller Scroller Scroller
  </div>
</div>

<script type="text/javascript"> 
  $(function() {
    moveScroller();
  });
</script> 

और एक सरल लाइव डेमो

एक नवजात, स्क्रिप्ट-मुक्त विकल्प है position: sticky , जो क्रोम, फ़ायरफ़ॉक्स और सफारी में समर्थित है। HTML5Rocks और डेमो , और मोज़िला डॉक्स पर लेख देखें ।


3
किसी कारण से, {स्क्रॉल: गलत} मुझे समस्याएं दे रहा था (jQuery 1.6.2)। इसके बिना काम लगता है। लिंक किए गए डेमो से कांटा । किसी भी विचार अगर यह एक उद्देश्य में कार्य करता है?
एडी

मुझे इससे बहुत परेशानी हो रही है, मेरे जीवन के लिए मैं दोहरा नहीं सकता, मैंने लाइव डेमो और इसके काम न करने की भी कोशिश की है। क्या कोई ऐसे ट्यूटोरियल से जुड़ सकता है जो कदम से कदम निर्देश प्रदान करता है?
ट्रेवर ड्यूप

2
यह ठीक काम करने लगता है, जब मैं डेमो (1.3.2) के रूप में jQuery के एक ही संस्करण का उपयोग करता हूं। कुछ बिंदु पर किसी offsetवस्तु को इनपुट एपीआई के रूप में स्वीकार करना बंद कर दिया जाना चाहिए । jquery.com/offset । @Eddie आपका संशोधन वर्तमान jQuery के साथ सुरक्षित होना चाहिए।
ग्रीम

1
क्या कोई कारण है कि आप के var d = $("#scroller-anchor").offset().top;साथ प्रतिस्थापित नहीं कर सकते हैं var d = $("#sidebar").offset().top;और खाली स्कॉलर-एंकर div से छुटकारा पा सकते हैं? यहाँ मेरा कांटा दिखा रहा है कि मैं किस बारे में बात कर रहा हूँ।
माइक डेक

@ मायकेडेक मुझे संदेह है कि अगर मार्जिन या पेडिंग हैं, तो आप नियंत्रित करना चाहेंगे जहां कंटेनर के सापेक्ष घुमक्कड़ को तैनात किया गया है।
जोश ली

72

जनवरी 2017 तक और क्रोम 56 की रिलीज़ के दौरान, सामान्य उपयोग वाले अधिकांश ब्राउज़र position: stickyसीएसएस में संपत्ति का समर्थन करते हैं।

#thing_to_stick {
  position: sticky;
  top: 0px;
}

फ़ायरफ़ॉक्स और क्रोम में मेरे लिए चाल है।

सफारी में आपको अभी भी उपयोग करने की आवश्यकता है position: -webkit-sticky

पॉलीफ़िल इंटरनेट एक्सप्लोरर और एज के लिए उपलब्ध हैं; https://github.com/wilddeer/stickyfill अच्छा लग रहा है।


5
यह आज सामान्य उपयोग में अधिकांश ब्राउज़रों में समर्थित है। देखें caniuse.com/#feat=css-sticky दूसरी बात, मैं एक ऐसे समाधान को पसंद करता हूं, जिसे कोड की 2 पंक्तियों में एक संस्करण में उबाला जा सके, जिसके लिए कस्टम जावास्क्रिप्ट की आवश्यकता होती है। और यह भविष्य-प्रमाण भी है। यदि आप ब्राउज़र संगतता के बारे में चिंतित हैं, तो पॉलीफ़िल का उपयोग करें।
कॉलिन टी हार्ट

1
इससे आसान नहीं हो सकता है :)
mestarted

1
मैं इस टिप्पणी में जोड़ना चाहूंगा कि हम z- इंडेक्स कर सकते हैं: 99999 ;, क्योंकि अगर यह शीर्ष पर नहीं जाता है, तो दूसरी सामग्री पहले प्रदान की जाएगी। लेकिन यह स्वीकृत समाधान होना चाहिए।
दिनमान ११

बस आईडी = "thing_to_stick" के साथ एक div में इसे लपेटें
एंटोन

सरल और आसान उपाय। और मेरे मामले में अन्य समाधानों की तुलना में बेहतर काम करता है।
fsevenm

33

मुझे आपके समान ही समस्या थी और इसकी देखभाल करने के लिए jQuery प्लगइन बनाना समाप्त हुआ। यह वास्तव में उन सभी समस्याओं को हल करता है जिन्हें लोगों ने यहां सूचीबद्ध किया है, साथ ही यह कुछ वैकल्पिक सुविधाओं को भी जोड़ता है।

विकल्प

stickyPanelSettings = {
    // Use this to set the top margin of the detached panel.
    topPadding: 0,

    // This class is applied when the panel detaches.
    afterDetachCSSClass: "",

    // When set to true the space where the panel was is kept open.
    savePanelSpace: false,

    // Event fires when panel is detached
    // function(detachedPanel, panelSpacer){....}
    onDetached: null,

    // Event fires when panel is reattached
    // function(detachedPanel){....}
    onReAttached: null,

    // Set this using any valid jquery selector to 
    // set the parent of the sticky panel.
    // If set to null then the window object will be used.
    parentSelector: null
};

https://github.com/donnyv/sticky-panel

डेमो: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm


1
अरे! धन्यवाद! यह एक महान समाधान है, और साझा करने के लिए धन्यवाद, निश्चित रूप से इसने मुझे बहुत समय बचाया। यह इस प्रश्न का समग्र स्वीकृत समाधान होना चाहिए, क्योंकि जहां तक ​​मैंने पढ़ा है, यह सबसे पूर्ण समाधान है। मूल रूप से, स्थिति के बाद ब्लॉक की मूल एक्स-स्थिति के साथ अन्य लोगों ने समस्या का समाधान नहीं किया: निश्चित शैली लागू होती है। तुम्हारी इस समस्या का हल करती है। वास्तव में, बहुत धन्यवाद!
मार्कोस बुर्के

हे डॉनी, अपने प्लगइन (v1.4.1) से भी प्यार करते हैं ... एक मुद्दे पर आया था, यदि कोई भी निर्दिष्ट नहीं किया गया था तो ब्लॉक एलिलमेंट ने अपनी चौड़ाई खो दी। इसलिए जब यह अलग हो गया तो इसे बदल दिया ... केवल चौड़ाई निर्धारित करके ताकि यह समान रहे। code// detach पैनल node.css ({"मार्जिन": 0, "बाएं": नोडलफ्ट, "टॉप": newNodeTop, "स्थिति": "फिक्स्ड", "चौड़ाई": नोड.विशेष ()}); code
विल Hancock

के लिए देखा और कई समाधान की कोशिश की, और यह काम किया "सही बॉक्स से बाहर।" अद्भुत कार्य! धन्यवाद!
आजतक २२'२२:

2
@WillHancock I'v ने iPad समर्थन जोड़ा, ताज़ा बग को ठीक किया और onDetached & onReattached घटनाओं को जोड़ा। नई घटनाओं के बाद आपको पैनल और स्पेसरपेल का उपयोग करने की अनुमति मिल जाएगी।
डॉनी वी।

4
स्क्रॉलिंग विभाग का समर्थन करने के लिए पेरेंटसलेक्टर विकल्प भी जोड़ा।
डॉनी वी।

24

और यहाँ कैसे jquery के बिना है (अद्यतन: अन्य उत्तर देखें जहाँ आप अब केवल CSS के साथ ऐसा कर सकते हैं)

var startProductBarPos=-1;
window.onscroll=function(){
  var bar = document.getElementById('nav');
  if(startProductBarPos<0)startProductBarPos=findPosY(bar);

  if(pageYOffset>startProductBarPos){
    bar.style.position='fixed';
    bar.style.top=0;
  }else{
    bar.style.position='relative';
  }

};

function findPosY(obj) {
  var curtop = 0;
  if (typeof (obj.offsetParent) != 'undefined' && obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop;
      obj = obj.offsetParent;
    }
    curtop += obj.offsetTop;
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}
* {margin:0;padding:0;}
.nav {
  border: 1px red dashed;
  background: #00ffff;
  text-align:center;
  padding: 21px 0;

  margin: 0 auto;
  z-index:10; 
  width:100%;
  left:0;
  right:0;
}

.header {
  text-align:center;
  padding: 65px 0;
  border: 1px red dashed;
}

.content {
  padding: 500px 0;
  text-align:center;
  border: 1px red dashed;
}
.footer {
  padding: 100px 0;
  text-align:center;
  background: #777;
  border: 1px red dashed;
}
<header class="header">This is a Header</header>
<div id="nav" class="nav">Main Navigation</div>
<div class="content">Hello World!</div>
<footer class="footer">This is a Footer</footer>


4
धन्यवाद! इन दिनों देशी जेएस समाधान खोजने के लिए मुश्किल हो रही है। यह पूरी तरह से काम किया।
शेररी

बहुत बहुत धन्यवाद, यह पूरी तरह से काम किया क्योंकि jquery कुछ विरासत उद्यम कोड के साथ संघर्ष कर रहा था मेरी परियोजना है
sng

यद्यपि मैं एक समस्या में चल रहा हूं, जहां अगर मैं पृष्ठ के नीचे स्क्रॉल करता हूं तो यह स्वचालित रूप से मुझे शीर्ष पर वापस भेज देगा।
sng

@sng क्या मेरा नमूना पृष्ठ ऐसा करता है?
जिम डब्ल्यू का कहना है कि मोनिका

@JimW मुझे इस मुद्दे का पता चला। मैं इसे मुख्य सामग्री div के बाईं ओर एक ऊर्ध्वाधर आधारित मेनू बार के साथ उपयोग करने का प्रयास कर रहा था। जब आप इसे नीचे स्क्रॉल करते हैं तो यह समझ में आता था कि यह निर्धारित नहीं किया जा सकता है कि यह पृष्ठ के निचले हिस्से को ठीक से मार रहा है या नहीं। मैं पुस्तक घटना श्रोता के लिए खिड़की के पर्दे आकार के कंटेनर div ऊंचाई निर्धारित करने के लिए कोड की एक पंक्ति जोड़ने समाप्त हो गया
sng

9

इस तरह मैंने इसे jquery के साथ किया। स्टैक ओवरफ्लो पर विभिन्न उत्तरों से सभी को एक साथ जोड़ा गया था। यह समाधान तेजी से प्रदर्शन के लिए चयनकर्ताओं को कैश करता है और "जंपिंग" समस्या को हल करता है जब चिपचिपा div चिपचिपा हो जाता है।

इसे jsfiddle पर देखें: http://jsfiddle.net/HQS8s/

सीएसएस:

.stick {
    position: fixed;
    top: 0;
}

जे एस:

$(document).ready(function() {
    // Cache selectors for faster performance.
    var $window = $(window),
        $mainMenuBar = $('#mainMenuBar'),
        $mainMenuBarAnchor = $('#mainMenuBarAnchor');

    // Run this on scroll events.
    $window.scroll(function() {
        var window_top = $window.scrollTop();
        var div_top = $mainMenuBarAnchor.offset().top;
        if (window_top > div_top) {
            // Make the div sticky.
            $mainMenuBar.addClass('stick');
            $mainMenuBarAnchor.height($mainMenuBar.height());
        }
        else {
            // Unstick the div.
            $mainMenuBar.removeClass('stick');
            $mainMenuBarAnchor.height(0);
        }
    });
});

7

यहाँ एक और विकल्प है:

JAVASCRIPT

var initTopPosition= $('#myElementToStick').offset().top;   
$(window).scroll(function(){
    if($(window).scrollTop() > initTopPosition)
        $('#myElementToStick').css({'position':'fixed','top':'0px'});
    else
        $('#myElementToStick').css({'position':'absolute','top':initTopPosition+'px'});
});

आपकी सीएसएस संपत्ति से #myElementToStickशुरू होनी चाहिए position:absolute


1
मुझे लगता है कि यह एक बहुत साफ और आसान उपाय है। मैं बस "पूर्ण" तत्व को स्थिति में नहीं रखूंगा - यह लेआउट को तोड़ सकता है - मैं बस इसे स्थिर पर सेट करूंगा।
जेरफ्रीड

4

जैसा कि जोश ली और कॉलिन के टी हार्ट ने कहा है, आप वैकल्पिक रूप से सिर्फ position: sticky; top: 0;उस div पर आवेदन कर सकते हैं जिसे आप स्क्रॉल करना चाहते हैं ...

इसके अलावा, केवल एक चीज जो आपको करनी होगी वह है इसे अपने पेज के शीर्ष पर कॉपी करें या इसे एक बाहरी सीएसएस शीट में फिट करने के लिए प्रारूपित करें:

<style>
#sticky_div's_name_here { position: sticky; top: 0; }
</style>

बस #sticky_div's_name_hereअपने div के नाम के साथ बदलें , यानी अगर आपका div था, <div id="example">तो आप डाल देंगे #example { position: sticky; top: 0; }


1

मेरा समाधान थोड़ा क्रिया है, लेकिन यह केंद्रीकृत लेआउट के लिए बाएं किनारे से परिवर्तनशील स्थिति को संभालता है।

// Ensurs that a element (usually a div) stays on the screen
//   aElementToStick   = The jQuery selector for the element to keep visible
global.makeSticky = function (aElementToStick) {
    var $elementToStick = $(aElementToStick);
    var top = $elementToStick.offset().top;
    var origPosition = $elementToStick.css('position');

    function positionFloater(a$Win) {
        // Set the original position to allow the browser to adjust the horizontal position
        $elementToStick.css('position', origPosition);

        // Test how far down the page is scrolled
        var scrollTop = a$Win.scrollTop();
        // If the page is scrolled passed the top of the element make it stick to the top of the screen
        if (top < scrollTop) {
            // Get the horizontal position
            var left = $elementToStick.offset().left;
            // Set the positioning as fixed to hold it's position
            $elementToStick.css('position', 'fixed');
            // Reuse the horizontal positioning
            $elementToStick.css('left', left);
            // Hold the element at the top of the screen
            $elementToStick.css('top', 0);
        }
    }

    // Perform initial positioning
    positionFloater($(window));

    // Reposition when the window resizes
    $(window).resize(function (e) {
        positionFloater($(this));
    });

    // Reposition when the window scrolls
    $(window).scroll(function (e) {
        positionFloater($(this));
    });
};

1

दूसरों के साथ समस्या रखने वालों के लिए प्रयास करने के लिए यहां एक और संस्करण है। यह इस डुप्लिकेट प्रश्न में चर्चा की गई तकनीकों को एक साथ खींचता है , और आवश्यक रूप से सहायक एचआइवी को उत्पन्न करता है ताकि कोई अतिरिक्त HTML की आवश्यकता न हो।

सीएसएस:

.sticky { position:fixed; top:0; }

JQuery:

function make_sticky(id) {
    var e = $(id);
    var w = $(window);
    $('<div/>').insertBefore(id);
    $('<div/>').hide().css('height',e.outerHeight()).insertAfter(id);
    var n = e.next();
    var p = e.prev();
    function sticky_relocate() {
      var window_top = w.scrollTop();
      var div_top = p.offset().top;
      if (window_top > div_top) {
        e.addClass('sticky');
        n.show();
      } else {
        e.removeClass('sticky');
        n.hide();
      }
    }
    w.scroll(sticky_relocate);
    sticky_relocate();
}

एक तत्व चिपचिपा बनाने के लिए, करें:

make_sticky('#sticky-elem-id');

जब तत्व चिपचिपा हो जाता है, तो कोड शेष सामग्री की स्थिति का प्रबंधन करता है ताकि इसे चिपचिपा तत्व द्वारा छोड़े गए अंतराल में कूदने से बचा सके। इसके ऊपर स्क्रॉल करने पर यह चिपचिपा तत्व को उसकी मूल गैर-चिपचिपी स्थिति में भी लौटाता है।


आपका दृष्टिकोण जॉनबी के दृष्टिकोण के समान है । उस उत्तर के लिए आपके मतभेदों को ध्यान में रखते हुए, मैं सोच रहा हूं (1) क्या एक दूसरे "हेल्पर डिव" (जॉनब के उपयोग की तरह सिर्फ 1 के बजाय) का उपयोग करने का एक फायदा है, और (2) क्या छिपाने का उपयोग करने का एक फायदा है () () शो () के बजाय सिर्फ हेल्पर div की ऊंचाई निर्धारित करने (जैसे JohnB करता है)? शायद एक प्रदर्शन अंतर? अब तक मैं मतभेदों को समझने में सक्षम नहीं हुआ हूं, लेकिन शायद कुछ निश्चित परिदृश्यों में अंतर होगा (जैसे शायद इनलाइन तत्वों या कुछ और को शामिल करना), इसीलिए मैं यह पूछना चाहता हूं। धन्यवाद।
जेसन फ्रैंक

1

यहां जोश ली के जवाब का एक विस्तारित संस्करण है। यदि आप चाहते हैं कि div दाईं ओर साइडबार पर हो, और एक सीमा के भीतर तैरती हो (यानी, आपको शीर्ष और निचले एंकर स्थिति निर्दिष्ट करने की आवश्यकता है)। जब आप मोबाइल उपकरणों पर इसे देखते हैं तो यह एक बग को ठीक करता है (आपको बाईं ओर स्क्रॉल स्थिति की जांच करने की आवश्यकता है अन्यथा div स्क्रीन से हट जाएगी)।

function moveScroller() {
    var move = function() {
        var st = $(window).scrollTop();
        var sl = $(window).scrollLeft();
        var ot = $("#scroller-anchor-top").offset().top;
        var ol = $("#scroller-anchor-top").offset().left;
        var bt = $("#scroller-anchor-bottom").offset().top;
        var s = $("#scroller");
        if(st > ot) {
            if (st < bt - 280) //280px is the approx. height for the sticky div
            {
                s.css({
                    position: "fixed",
                    top: "0px",
                    left: ol-sl
                }); 
            }
            else
            {
                s.css({
                    position: "fixed",
                    top: bt-st-280,
                    left: ol-sl
                }); 
            }
        } else {
            s.css({
                position: "relative",
                top: "",
                left: ""
            });

        }
    };
    $(window).scroll(move);
    move();
}

1

इसी बात को खोजते हुए मैं इस पार आया। मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे लगा कि मैं हाल ही में जवाब देना चाहूंगा।

स्क्रॉलोरमा में एक it पिन इट ’फीचर है जो कि बस वही है जिसकी मुझे तलाश थी।

http://johnpolacek.github.io/scrollorama/


0

इस अन्य प्रश्न का उत्तर देने के लिए दी गई जानकारी आपके लिए मददगार हो सकती है, इवान:

स्क्रॉल करने के बाद एलिमेंट दिखाई दे रहा है या नहीं

आप मूल रूप से यह सत्यापित करने के बाद ही तय करने के लिए तत्व की शैली को संशोधित करना चाहते हैं कि document.body.scrollTop मान आपके तत्व के शीर्ष के बराबर या उससे अधिक है।


0

स्वीकृत उत्तर काम करता है लेकिन यदि आप इसे ऊपर स्क्रॉल करते हैं तो पिछली स्थिति में वापस नहीं जाते हैं। यह हमेशा वहां रखे जाने के बाद शीर्ष पर अटक जाता है।

  $(window).scroll(function(e) {
    $el = $('.fixedElement');
    if ($(this).scrollTop() > 42 && $el.css('position') != 'fixed') {
      $('.fixedElement').css( 'position': 'fixed', 'top': '0px');

    } else if ($(this).scrollTop() < 42 && $el.css('position') != 'relative') {
      $('.fixedElement').css( 'relative': 'fixed', 'top': '42px');
//this was just my previous position/formating
    }
  });

jleedev की प्रतिक्रिया में काम पूरा हो गया है, लेकिन मैं इसे काम करने में सक्षम नहीं था। उनके उदाहरण पृष्ठ ने भी (मेरे लिए) काम नहीं किया।


0

आप 3 अतिरिक्त पंक्तियों को जोड़ सकते हैं ताकि जब उपयोगकर्ता शीर्ष पर वापस स्क्रॉल करे, तो div अपने पुराने स्थान पर चिपक जाएगी:

यहाँ कोड है:

if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed'){
    $('.fixedElement').css({'position': 'relative', 'top': '200px'});
}

0

मेरे पास एक div में लिंक सेटअप है इसलिए यह अक्षर और संख्या लिंक की एक ऊर्ध्वाधर सूची है।

#links {
    float:left;
    font-size:9pt;
    margin-left:0.5em;
    margin-right:1em;
    position:fixed;
    text-align:center;
    width:0.8em;
}

मैं तब लोड की गई स्थिति को बचाने के लिए इस आसान jQuery फ़ंक्शन को सेटअप करता हूं और फिर उस स्थिति से परे स्क्रॉल करते समय स्थिति को निश्चित में बदल देता हूं।

नोट: यह केवल काम करता है अगर लिंक पृष्ठ लोड पर दिखाई दे रहे हैं !!

var listposition=false;
jQuery(function(){
     try{
        ///// stick the list links to top of page when scrolling
        listposition = jQuery('#links').css({'position': 'static', 'top': '0px'}).position();
        console.log(listposition);
        $(window).scroll(function(e){
            $top = $(this).scrollTop();
            $el = jQuery('#links');
            //if(typeof(console)!='undefined'){
            //    console.log(listposition.top,$top);
            //}
            if ($top > listposition.top && $el.css('position') != 'fixed'){
                $el.css({'position': 'fixed', 'top': '0px'});
            }
            else if ($top < listposition.top && $el.css('position') == 'fixed'){
                $el.css({'position': 'static'});
            }
        });

    } catch(e) {
        alert('Please vendor admin@mydomain.com (Myvendor JavaScript Issue)');
    }
});

0

मैंने इस टेक को बनाने के लिए ऊपर दिए गए कुछ काम का इस्तेमाल किया। मैंने इसे थोड़ा सुधार दिया और सोचा कि मैं अपना काम साझा करूंगा। उम्मीद है की यह मदद करेगा।

jsfuddle कोड

function scrollErrorMessageToTop() {
    var flash_error = jQuery('#flash_error');
    var flash_position = flash_error.position();

    function lockErrorMessageToTop() {
        var place_holder = jQuery("#place_holder");
        if (jQuery(this).scrollTop() > flash_position.top && flash_error.attr("position") != "fixed") {
            flash_error.css({
                'position': 'fixed',
                'top': "0px",
                "width": flash_error.width(),
                "z-index": "1"
            });
            place_holder.css("display", "");
        } else {
            flash_error.css('position', '');
            place_holder.css("display", "none");
        }

    }
    if (flash_error.length > 0) {
        lockErrorMessageToTop();

        jQuery("#flash_error").after(jQuery("<div id='place_holder'>"));
        var place_holder = jQuery("#place_holder");
        place_holder.css({
            "height": flash_error.height(),
            "display": "none"
        });
        jQuery(window).scroll(function(e) {
            lockErrorMessageToTop();
        });
    }
}
scrollErrorMessageToTop();​

यह स्क्रॉल करने का एक तरीका थोड़ा अधिक गतिशील है। यह कुछ काम की जरूरत है और मैं कुछ बिंदु पर यह एक pluging में बदल जाएगा, लेकिन यह वही है जो मैं काम के घंटे के बाद आया था।


0

जावास्क्रिप्ट में आप कर सकते हैं:

var element = document.getElementById("myid");
element.style.position = "fixed";
element.style.top = "0%";

0

एक सटीक समाधान नहीं बल्कि विचार करने के लिए एक बढ़िया विकल्प

यह CSS केवल स्क्रीन स्क्रॉल बार के ऊपर हैकेवल सीएसएस , कोई जावास्क्रिप्ट, कोई JQuery, कोई मस्तिष्क काम ( योग्य ) के साथ सभी समस्या का हल ।

मेरी बेला का आनंद लें : D सभी कोड वहां शामिल हैं :)

सीएसएस

#menu {
position: fixed;
height: 60px;
width: 100%;
top: 0;
left: 0;
border-top: 5px solid #a1cb2f;
background: #fff;
-moz-box-shadow: 0 2px 3px 0px rgba(0, 0, 0, 0.16);
-webkit-box-shadow: 0 2px 3px 0px rgba(0, 0, 0, 0.16);
box-shadow: 0 2px 3px 0px rgba(0, 0, 0, 0.16);
z-index: 999999;
}

.w {
    width: 900px;
    margin: 0 auto;
    margin-bottom: 40px;
}<br type="_moz">

सामग्री को काफी लंबा रखें ताकि आप यहां प्रभाव देख सकें :) ओह, और संदर्भ वहां भी है, इस तथ्य के लिए कि वह अपने क्रेडिट के लायक है

सीएसएस केवल स्क्रीन स्क्रॉल बार का शीर्ष


थोड़ा सा
ऑफटॉपिक

मैं एक अच्छे समाधान के खिलाफ नहीं हूं, लेकिन आपके उत्तर में कोड हमेशा शीर्ष पर रहने के लिए मेनू की तरह कुछ बनाने का एक तरीका प्रदान करता है। लेकिन यह सवाल नहीं था ...
टोक

आप बस div को ठीक कर रहे हैं और स्क्रॉल करने पर कुछ भी नहीं कर रहे हैं।
योगीहोस्टिंग

0

यहाँ एक उदाहरण है जो jquery- दृश्यमान प्लगइन का उपयोग करता है: http://jsfiddle.net/711p4em4/

HTML:

<div class = "wrapper">
    <header>Header</header>
    <main>
        <nav>Stick to top</nav>
        Content
    </main>
    <footer>Footer</footer>
</div>

सीएसएस:

* {
    margin: 0;
    padding: 0;
}

body {
    background-color: #e2e2e2;
}

.wrapper > header,
.wrapper > footer {
    font: 20px/2 Sans-Serif;
    text-align: center;
    background-color: #0040FF;
    color: #fff;
}

.wrapper > main {
    position: relative;
    height: 500px;
    background-color: #5e5e5e;
    font: 20px/500px Sans-Serif;
    color: #fff;
    text-align: center;
    padding-top: 40px;
}

.wrapper > main > nav {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    font: 20px/2 Sans-Serif;
    color: #fff;
    text-align: center;
    background-color: #FFBF00;
}

.wrapper > main > nav.fixed {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
}

JS (jquery- दृश्यमान प्लगइन शामिल करें):

(function($){

    /**
     * Copyright 2012, Digital Fusion
     * Licensed under the MIT license.
     * http://teamdf.com/jquery-plugins/license/
     *
     * @author Sam Sehnert
     * @desc A small plugin that checks whether elements are within
     *       the user visible viewport of a web browser.
     *       only accounts for vertical position, not horizontal.
     */
    var $w = $(window);
    $.fn.visible = function(partial,hidden,direction){

        if (this.length < 1)
            return;

        var $t        = this.length > 1 ? this.eq(0) : this,
            t         = $t.get(0),
            vpWidth   = $w.width(),
            vpHeight  = $w.height(),
            direction = (direction) ? direction : 'both',
            clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true;

        if (typeof t.getBoundingClientRect === 'function'){

            // Use this native browser method, if available.
            var rec = t.getBoundingClientRect(),
                tViz = rec.top    >= 0 && rec.top    <  vpHeight,
                bViz = rec.bottom >  0 && rec.bottom <= vpHeight,
                lViz = rec.left   >= 0 && rec.left   <  vpWidth,
                rViz = rec.right  >  0 && rec.right  <= vpWidth,
                vVisible   = partial ? tViz || bViz : tViz && bViz,
                hVisible   = partial ? lViz || rViz : lViz && rViz;

            if(direction === 'both')
                return clientSize && vVisible && hVisible;
            else if(direction === 'vertical')
                return clientSize && vVisible;
            else if(direction === 'horizontal')
                return clientSize && hVisible;
        } else {

            var viewTop         = $w.scrollTop(),
                viewBottom      = viewTop + vpHeight,
                viewLeft        = $w.scrollLeft(),
                viewRight       = viewLeft + vpWidth,
                offset          = $t.offset(),
                _top            = offset.top,
                _bottom         = _top + $t.height(),
                _left           = offset.left,
                _right          = _left + $t.width(),
                compareTop      = partial === true ? _bottom : _top,
                compareBottom   = partial === true ? _top : _bottom,
                compareLeft     = partial === true ? _right : _left,
                compareRight    = partial === true ? _left : _right;

            if(direction === 'both')
                return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
            else if(direction === 'vertical')
                return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop));
            else if(direction === 'horizontal')
                return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
        }
    };

})(jQuery);

$(function() {
    $(window).scroll(function() {
        $(".wrapper > header").visible(true) ?
            $(".wrapper > main > nav").removeClass("fixed") :
            $(".wrapper > main > nav").addClass("fixed");
    });
});

-1

जब तक पाद हिट नहीं करता तब तक चिपचिपा रहता है:

function stickyCostSummary() {
    var stickySummary = $('.sticky-cost-summary');
    var scrollCostSummaryDivPosition = $(window).scrollTop();
    var footerHeight = $('#footer').height();
    var documentHeight = $(document).height();
    var costSummaryHeight = stickySummary.height();
    var headerHeight = 83;
    var footerMargin = 10;
    var scrollHeight = 252;
    var footerPosition = $('#footer').offset().top;

    if (scrollCostSummaryDivPosition > scrollHeight && scrollCostSummaryDivPosition <= (documentHeight - footerHeight - costSummaryHeight - headerHeight - footerMargin)) {
        stickySummary.removeAttr('style');
        stickySummary.addClass('fixed');

    } else if (scrollCostSummaryDivPosition > (documentHeight - footerHeight - costSummaryHeight - headerHeight - footerMargin)) {
        stickySummary.removeClass('fixed');
        stickySummary.css({
          "position" : "absolute",
          "top" : (documentHeight - footerHeight - costSummaryHeight - headerHeight - footerMargin - scrollHeight) + "px"
      });
    } else {
        stickySummary.removeClass('fixed');
        stickySummary.css({
            "position" : "absolute",
            "top" : "0"
        });
    }
}

$window.scroll(stickyCostSummary);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.