ScrollIntoView स्क्रॉल बहुत दूर है


107

मेरे पास एक पृष्ठ है जहां एक स्क्रॉल पट्टी युक्त तालिका पंक्तियों में divs के साथ गतिशील रूप से डेटाबेस से उत्पन्न होती है। प्रत्येक तालिका पंक्ति एक लिंक की तरह काम करती है, जैसे आप वीडियो प्लेयर के बगल में YouTube प्लेलिस्ट पर देखेंगे।

जब कोई उपयोगकर्ता पृष्ठ पर जाता है, तो वे जिस विकल्प पर हैं, वह स्क्रॉलिंग डिव के शीर्ष पर जाना चाहिए। यह कार्यक्षमता काम कर रही है। मुद्दा यह है कि यह सिर्फ एक बहुत दूर चला जाता है। विकल्प के रूप में वे 10px बहुत अधिक हैं। तो, पृष्ठ का दौरा किया जाता है, यह पता लगाने के लिए कि किस विकल्प का चयन किया गया था, url का उपयोग किया जाता है और फिर स्क्रॉलिंग div के शीर्ष पर उस विकल्प को स्क्रॉल करता है। नोट: यह विंडो के लिए स्क्रॉल बार नहीं है, यह स्क्रॉलबार के साथ एक div है।

मैं इस कोड को div के शीर्ष पर चयनित विकल्प को स्थानांतरित करने के लिए उपयोग कर रहा हूं:

var pathArray = window.location.pathname.split( '/' );

var el = document.getElementById(pathArray[5]);

el.scrollIntoView(true);

यह इसे div के शीर्ष पर ले जाता है लेकिन लगभग 10 पिक्सेल बहुत ऊपर तक। किसी को पता है कि कैसे तय करने के लिए?


44
ऑफसेट कॉन्फ़िगरेशन की कमी scrollIntoViewपरेशान कर रही है।
रहस्यवाद

जवाबों:


57

अगर यह 10px के बारे में है, तो मुझे लगता है कि आप मैन्युअल रूप से divउस तरह स्क्रॉल युक्त ऑफसेट समायोजित कर सकते हैं :

el.scrollIntoView(true);
document.getElementById("containingDiv").scrollTop -= 10;

1
क्या यह उतना ही एनिमेटेड प्रभाव होगा scrollIntoView?
1252748

1
@thomas AFAIK, सादा DOM scrollIntoViewफ़ंक्शन एनीमेशन का कारण नहीं बनता है। क्या आप स्क्रॉल इनटू व्यू jQuery प्लगइन के बारे में बात कर रहे हैं?
लुकास ट्रेजेन्यूस्की

1
उस आदमी ने काम किया, सिवाय इसके कि यह गलत दिशा थी, इसलिए मुझे सिर्फ इतना करना था कि इसे + = 10 से बदलकर = = 10 कर दिया जाए और अब यह सही हो रहा है, मदद के लिए बहुत बहुत धन्यवाद !!!!
मैथ्यू विल्सन

हां। मैं भ्रमित था। मैंने इसे एनिमेटेड समझा। माफ़ करना!
1252748

17
यह चेतन कर सकता है, बस जोड़ el.scrollIntoView({ behavior: 'smooth' });। समर्थन हालांकि महान नहीं है!
डेविसपिनल

108

धीरे-धीरे एक उचित स्थिति में स्क्रॉल करें

सही हो जाओ y समन्वय और उपयोगwindow.scrollTo({top: y, behavior: 'smooth'})

const id = 'profilePhoto';
const yOffset = -10; 
const element = document.getElementById(id);
const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;

window.scrollTo({top: y, behavior: 'smooth'});

2
यह सबसे सही उत्तर है - हम आसानी से स्क्रॉल की स्थिति का पता लगा सकते हैं jQuery('#el').offset().topऔर फिर उपयोग करने के लिएwindow.scrollTo
अलेक्जेंडर गोंचारोव

1
इस समाधान के लिए +1। इसने मुझे तत्व को सही ढंग से स्क्रॉल करने में मदद की जब मेरे पास शीर्ष ऑफसेट के साथ एक कंटेनर तैनात था।
लीगा

कोई भी यहाँ आ रहा है, जो रिएक्ट राउटर के साथ हैशलिंक का उपयोग कर रहा है, यह मेरे लिए काम कर रहा है। अपने HashLink पर स्क्रॉल प्रोप में, scroll={el => { const yCoordinate = el.getBoundingClientRect().top + window.pageYOffset; const yOffset = -80; window.scrollTo({ top: yCoordinate + yOffset, behavior: 'smooth' }); }}- जहाँ ऑफ़सेट बेहतर रिक्ति के लिए आपके हेडर के आकार से 10-15 पिक्सेल अधिक है
Rob B

86

आप इसे दो चरणों में कर सकते हैं:

el.scrollIntoView(true);
window.scrollBy(0, -10); // Adjust scrolling with a negative value here

23
यदि रन scrollIntoView()से पहले स्क्रॉलिंग समाप्त नहीं हुई है scrollBy(), तो बाद वाला स्क्रॉल पूर्व को रद्द कर देगा। कम से कम क्रोम 71 पर।
डेव ह्यूजेस

1
इस मामले में नीचे दिए गए उत्तर में देखे गए सेटटाइमआउट का उपयोग करें: stackoverflow.com/a/51935129/1856258 .. मेरे लिए यह बिना टाइमआउट के काम करता है। धन्यवाद!
leole

क्या सीधे एप्लिकेशन को प्रासंगिक स्थान पर ले जाने के लिए, स्क्रॉल इनटू व्यू में पिक्सेल सुधार को सीधे इंजेक्ट करने का एक तरीका है? जैसे scrollIntoView({adjustment:y}), मुझे लगता है कि यह अंत में एक कस्टम कोड के साथ संभव होना चाहिए
Webwoman

78

निरपेक्ष विधि द्वारा स्थिति एंकर

ऐसा करने का एक और तरीका यह है कि आप अपने एंकरों को उसी स्थिति में रखें, जहां आप ऑफसेट द्वारा स्क्रॉल करने पर भरोसा करने के बजाय पृष्ठ पर चाहते हैं। मुझे लगता है कि यह प्रत्येक तत्व के लिए बेहतर नियंत्रण की अनुमति देता है (उदाहरण के लिए। यदि आप कुछ तत्वों के लिए एक अलग ऑफसेट चाहते हैं), और ब्राउज़र एपीआई परिवर्तन / अंतर के लिए अधिक प्रतिरोधी भी हो सकता है।

<div id="title-element" style="position: relative;">
  <div id="anchor-name" style="position: absolute; top: -100px; left: 0"></div>
</div>

अब तत्व के सापेक्ष -100px के रूप में ऑफसेट निर्दिष्ट किया जाता है। कोड पुन: उपयोग के लिए इस एंकर को बनाने के लिए एक फ़ंक्शन बनाएं, या यदि आप एक आधुनिक जेएस फ्रेमवर्क का उपयोग कर रहे हैं जैसे कि रिएक्ट ऐसा घटक बनाएं जो आपके एंकर को प्रस्तुत करता है, और एंकर के नाम में पास करें और प्रत्येक तत्व के लिए संरेखण करें, जो हो सकता है या हो सकता है समान नहीं हो।

तो बस का उपयोग करें:

const element = document.getElementById('anchor-name')
element.scrollIntoView({ behavior: 'smooth', block: 'start' });

100px की ऑफसेट के साथ चिकनी स्क्रॉलिंग के लिए।


12
यह सुचारू रूप से और सरलता से लागू करने का सबसे अच्छा तरीका है।
16:22 पर पकड़ 22

2
सबसे अच्छा और सबसे देशी तरीका जो मुझे लगता है।
ब्यूटेनियन अपार्टमेन्ट

1
यह इतना सरल और चालाक है। दूसरों में से कई सिर्फ अनावश्यक जेएस जोड़ते हैं।
RedSands

2
यह विशेष रूप से तब उपयोगी होता है जब "पेज टॉप" टाइप लिंक एक नेव बार के नीचे होता है, और आप नेवी दिखाना चाहते हैं, लेकिन कोई अन्य लिंक ऑफ़सेट नहीं चाहते हैं
जो मून

आप नकारात्मक मार्जिन-टॉप का उपयोग करके इसे प्राप्त कर सकते हैं, आप स्थिति के साथ एक और तत्व को लपेटने से बचते हैं
सेर्गी

15

मैंने इस समस्या को हल करके,

element.scrollIntoView({ behavior: 'smooth', block: 'center' });

यह तत्व centerस्क्रॉल करने के बाद दिखाई देता है , इसलिए मुझे गणना करने की आवश्यकता नहीं है yOffset

आशा करता हूँ की ये काम करेगा...


1
आप का उपयोग करना चाहिए scrollToपर नहीं elementलेकिन परwindow
अर्सेने द्वितीय

@ Arseniy-II कि बाहर इशारा करने के लिए धन्यवाद !!। मुझे वह हिस्सा याद आ गया!
इम्तियाज शकील सिद्दीकी

क्या ब्लॉक शीर्ष के लिए मदद करता है?
अशोक कुमार गणेशन

11

यह मेरे लिए क्रोम में काम करता है (चिकनी स्क्रॉलिंग और बिना टाइम हैक के)

यह बस तत्व को स्थानांतरित करता है, स्क्रॉल शुरू करता है, फिर इसे वापस ले जाता है।

यदि तत्व पहले से ही स्क्रीन पर है तो कोई "पॉपिंग" दिखाई नहीं देता है।

pos = targetEle.style.position;
top = targetEle.style.top;
targetEle.style.position = 'relative';
targetEle.style.top = '-20px';
targetEle.scrollIntoView({behavior: 'smooth', block: 'start'});
targetEle.style.top = top;
targetEle.style.position = pos;

यह सबसे अच्छा समाधान है ... काश इसे उत्तर के रूप में चिह्नित किया जाता। एक दो घंटे बचाए होते।
शिवम

7

पहले वाले उत्तर पर निर्माण, मैं एक Angular5 प्रोजेक्ट में कर रहा हूं।

के साथ शुरू:

// el.scrollIntoView(true);
el.scrollIntoView({
   behavior: 'smooth',
   block: 'start'
});
window.scrollBy(0, -10); 

लेकिन इसने कुछ समस्याएं दीं और इस तरह स्क्रॉलबी () के लिए सेटटाइमआउट करने की आवश्यकता हुई:

//window.scrollBy(0,-10);
setTimeout(() => {
  window.scrollBy(0,-10)
  }, 500);

और यह MSIE11 और Chrome 68+ में पूरी तरह से काम करता है। मैंने एफएफ में परीक्षण नहीं किया है। 500ms सबसे कम विलंब था जो मैं उद्यम करूंगा। कम जाना कभी-कभी विफल रहा क्योंकि चिकनी स्क्रॉल अभी तक पूरा नहीं हुआ था। अपनी खुद की परियोजना के लिए आवश्यक के रूप में समायोजित करें।

इस सरल लेकिन प्रभावी समाधान के लिए +1 से फ्रेड 727


6
यह एक तत्व को स्क्रॉल करने के लिए थोड़ा सा जानदार महसूस करता है और फिर थोड़ी देर बाद स्क्रॉल करता है।
पकड़ 22

6

यह मानकर कि आप उन सभी डीवाओं को स्क्रॉल करना चाहते हैं जो डोम में एक ही स्तर पर हैं और वर्ग नाम "स्क्रॉल-विथ-ऑफ़सेट" है, तो यह सीएसएस समस्या को हल करेगा:

.scroll-with-offset {    
  padding-top: 100px;
  margin-bottom: -100px;
}

पृष्ठ के शीर्ष से ऑफसेट 100px है। यह केवल ब्लॉक के अनुसार ही काम करेगा: 'स्टार्ट':

element.scrollIntoView({ behavior: 'smooth', block: 'start' });

क्या हो रहा है कि divs का शीर्ष बिंदु सामान्य स्थान पर है, लेकिन उनकी आंतरिक सामग्री सामान्य स्थान से 100px नीचे है। यही पैडिंग-टॉप: 100px है। मार्जिन-बॉटम: -100px डिव के अतिरिक्त मार्जिन को ऑफसेट करना है। समाधान को पूरा करने के लिए शीर्ष-सबसे और सबसे-सबसे divs के लिए मार्जिन / पैडिंग को ऑफसेट करने के लिए इस CSS को भी जोड़ें:

.top-div {
  padding-top: 0;
}
.bottom-div {
  margin-bottom: 0;
}

6

यह समाधान @ आर्सेन- II से संबंधित है , मैंने इसे एक समारोह में सरल बनाया है।

function _scrollTo(selector, yOffset = 0){
  const el = document.querySelector(selector);
  const y = el.getBoundingClientRect().top + window.pageYOffset + yOffset;

  window.scrollTo({top: y, behavior: 'smooth'});
}

उपयोग (आप StackOverflow में यहीं कंसोल खोल सकते हैं और इसका परीक्षण कर सकते हैं):

_scrollTo('#question-header', 0);


3

मुझे यह मिल गया है और यह मेरे लिए शानदार ढंग से काम करता है:

// add a smooth scroll to element
scroll(el) {
el.scrollIntoView({
  behavior: 'smooth',
  block: 'start'});

setTimeout(() => {
window.scrollBy(0, -40);
}, 500);}

आशा करता हूँ की ये काम करेगा।


2

एक अन्य समाधान "ऑफसेटटॉप" का उपयोग करना है, जैसे:

var elementPosition = document.getElementById('id').offsetTop;

window.scrollTo({
  top: elementPosition - 10, //add your necessary value
  behavior: "smooth"  //Smooth transition to roll
});

2

तो, शायद यह थोड़ा क्लिंक है लेकिन अभी तक बहुत अच्छा है। Im कोणीय 9 में काम कर रहा है।

फ़ाइल .ts

scroll(el: HTMLElement) {
  el.scrollIntoView({ block: 'start',  behavior: 'smooth' });   
}

फ़ाइल .html

<button (click)="scroll(target)"></button>
<div  #target style="margin-top:-50px;padding-top: 50px;" ></div>

मैं ऑफसेट को मार्जिन और पैडिंग टॉप के साथ समायोजित करता हूं।

Saludos!


1

समाधान समाधान मिला। यह कहें कि आप उदाहरण के लिए किसी div, Element पर स्क्रॉल करना चाहते हैं, और आप इसके ऊपर 20px का अंतर रखना चाहते हैं। रेफरी को इसके ऊपर बने div पर सेट करें:

<div ref={yourRef} style={{position: 'relative', bottom: 20}}/> <Element />

ऐसा करने से यह रिक्ति पैदा होगी जो आप चाहते हैं।

यदि आपके पास एक हेडर है, तो हेडर के पीछे एक खाली डिव बनाएं और इसे हेडर की ऊंचाई के बराबर ऊंचाई पर असाइन करें और इसे संदर्भ दें।


0

मेरा मुख्य विचार उस दृश्य के ऊपर एक tempDiv बना रहा है जिसे हम स्क्रॉल करना चाहते हैं। यह मेरी परियोजना में पिछड़ने के बिना अच्छी तरह से काम करता है।

scrollToView = (element, offset) => {
    var rect = element.getBoundingClientRect();
    var targetY = rect.y + window.scrollY - offset;

    var tempDiv;
    tempDiv = document.getElementById("tempDiv");
    if (tempDiv) {
        tempDiv.style.top = targetY + "px";
    } else {
        tempDiv = document.createElement('div');
        tempDiv.id = "tempDiv";
        tempDiv.style.background = "#F00";
        tempDiv.style.width = "10px";
        tempDiv.style.height = "10px";
        tempDiv.style.position = "absolute";
        tempDiv.style.top = targetY + "px";
        document.body.appendChild(tempDiv);
    }

    tempDiv.scrollIntoView({ behavior: 'smooth', block: 'start' });
}

उदाहरण का उपयोग कर

onContactUsClick = () => {
    this.scrollToView(document.getElementById("contact-us"), 48);
}

आशा है कि यह मदद करेगा


0

आर्सेनी-द्वितीय के उत्तर के आधार पर: मेरे पास उपयोग-मामला था जहां स्क्रॉलिंग इकाई स्वयं विंडो नहीं थी, लेकिन एक आंतरिक टेम्पलेट (इस मामले में एक div)। इस परिदृश्य में हमें स्क्रॉलिंग कंटेनर के लिए एक आईडी सेट करने और getElementByIdइसके स्क्रॉलिंग फ़ंक्शन का उपयोग करने के लिए इसे प्राप्त करने की आवश्यकता है:

<div class="scroll-container" id="app-content">
  ...
</div>
const yOffsetForScroll = -100
const y = document.getElementById(this.idToScroll).getBoundingClientRect().top;
const main = document.getElementById('app-content');
main.scrollTo({
    top: y + main.scrollTop + yOffsetForScroll,
    behavior: 'smooth'
  });

अगर किसी को ऐसी ही स्थिति का सामना करना पड़ता है, तो यहां छोड़ देना!


0

यहाँ मेरे 2 सेंट है।

मेरे पास भी स्क्रॉल इनटू व्यू का तत्व थोड़ा अतीत में है, इसलिए मैंने एक स्क्रिप्ट (देशी जावास्क्रिप्ट) बनाई जो गंतव्य के लिए एक तत्व को प्रस्तुत करती है, इसे सीएसएस के साथ शीर्ष पर थोड़ा सा तैनात किया और उस पर स्क्रॉल किया। स्क्रॉल करने के बाद, मैं बनाए गए तत्वों को फिर से हटाता हूं।

HTML:

//anchor tag that appears multiple times on the page
<a href="#" class="anchors__link js-anchor" data-target="schedule">
    <div class="anchors__text">
        Scroll to the schedule
    </div>
</a>

//The node we want to scroll to, somewhere on the page
<div id="schedule">
    //html
</div>

जावास्क्रिप्ट फ़ाइल:

(() => {
    'use strict';

    const anchors = document.querySelectorAll('.js-anchor');

    //if there are no anchors found, don't run the script
    if (!anchors || anchors.length <= 0) return;

    anchors.forEach(anchor => {
        //get the target from the data attribute
        const target = anchor.dataset.target;

        //search for the destination element to scroll to
        const destination = document.querySelector(`#${target}`);
        //if the destination element does not exist, don't run the rest of the code
        if (!destination) return;

        anchor.addEventListener('click', (e) => {
            e.preventDefault();
            //create a new element and add the `anchors__generated` class to it
            const generatedAnchor = document.createElement('div');
            generatedAnchor.classList.add('anchors__generated');

            //get the first child of the destination element, insert the generated element before it. (so the scrollIntoView function scrolls to the top of the element instead of the bottom)
            const firstChild = destination.firstChild;
            destination.insertBefore(generatedAnchor, firstChild);

            //finally fire the scrollIntoView function and make it animate "smoothly"
            generatedAnchor.scrollIntoView({
                behavior: "smooth",
                block: "start",
                inline: "start"
            });

            //remove the generated element after 1ms. We need the timeout so the scrollIntoView function has something to scroll to.
            setTimeout(() => {
                destination.removeChild(generatedAnchor);
            }, 1);
        })
    })
})();

सीएसएस:

.anchors__generated {
    position: relative;
    top: -100px;
}

आशा है कि यह किसी को भी मदद करता है!


0

मैं इस सीएसएस युक्तियों को उन लोगों के लिए जोड़ता हूं जिन्होंने इस मुद्दे को ऊपर के समाधान के साथ हल नहीं किया है:

#myDiv::before {
  display: block;
  content: " ";
  margin-top: -90px; // adjust this with your header height
  height: 90px; // adjust this with your header height
  visibility: hidden;
}

0

UPD: मैंने एक npm पैकेज बनाया है जो निम्न समाधान से बेहतर काम करता है और उपयोग में आसान है।

मेरी स्मूथसक्रोल फ़ंक्शन

मैंने स्टीव बैंटन का अद्भुत समाधान निकाला है और एक फ़ंक्शन लिखा है जो इसे उपयोग करने के लिए अधिक सुविधाजनक बनाता है। जैसा कि मैंने पहले भी आजमाया है, वैसे ही इसका इस्तेमाल करना आसान होगा window.scroll()या हो सकता है window.scrollBy(), लेकिन इन दोनों में कुछ समस्याएं हैं:

  • एक सहज व्यवहार के साथ उनका उपयोग करने के बाद सब कुछ कबाड़ हो जाता है।
  • आप उन्हें किसी भी तरह से रोक नहीं सकते हैं और स्क्रॉल तक और इंतजार करना पड़ता है। इसलिए मुझे उम्मीद है कि मेरा कार्य आपके लिए उपयोगी होगा। इसके अलावा, एक हल्का पॉलीफ़िल है जो इसे सफारी और यहां तक ​​कि IE में काम करता है।

यहाँ कोड है

बस इसे कॉपी करें और इसके साथ गड़बड़ करें कि आप कैसे चाहते हैं।

import smoothscroll from 'smoothscroll-polyfill';

smoothscroll.polyfill();

const prepareSmoothScroll = linkEl => {
  const EXTRA_OFFSET = 0;

  const destinationEl = document.getElementById(linkEl.dataset.smoothScrollTo);
  const blockOption = linkEl.dataset.smoothScrollBlock || 'start';

  if ((blockOption === 'start' || blockOption === 'end') && EXTRA_OFFSET) {
    const anchorEl = document.createElement('div');

    destinationEl.setAttribute('style', 'position: relative;');
    anchorEl.setAttribute('style', `position: absolute; top: -${EXTRA_OFFSET}px; left: 0;`);

    destinationEl.appendChild(anchorEl);

    linkEl.addEventListener('click', () => {
      anchorEl.scrollIntoView({
        block: blockOption,
        behavior: 'smooth',
      });
    });
  }

  if (blockOption === 'center' || !EXTRA_OFFSET) {
    linkEl.addEventListener('click', () => {
      destinationEl.scrollIntoView({
        block: blockOption,
        behavior: 'smooth',
      });
    });
  }
};

export const activateSmoothScroll = () => {
  const linkEls = [...document.querySelectorAll('[data-smooth-scroll-to]')];

  linkEls.forEach(linkEl => prepareSmoothScroll(linkEl));
};

लिंक तत्व बनाने के लिए बस निम्नलिखित डेटा विशेषता जोड़ें:

data-smooth-scroll-to="element-id"

इसके अलावा आप एक और विशेषता को एक लत के रूप में सेट कर सकते हैं

data-smooth-scroll-block="center"

यह फ़ंक्शन के blockविकल्प का प्रतिनिधित्व scrollIntoView()करता है। डिफ़ॉल्ट रूप से, यह है start। पर और अधिक पढ़ें MDN

आखिरकार

अपनी आवश्यकताओं के लिए smoothScroll फ़ंक्शन समायोजित करें।

उदाहरण के लिए, यदि आपके पास कुछ निश्चित हेडर हैं (या मैं इसे शब्द के साथ कहता हूं masthead) तो आप ऐसा कुछ कर सकते हैं:

const mastheadEl = document.querySelector(someMastheadSelector);

// and add it's height to the EXTRA_OFFSET variable

const EXTRA_OFFSET = mastheadEl.offsetHeight - 3;

यदि आपके पास ऐसा कोई मामला नहीं है, तो इसे हटा दें, क्यों नहीं :-D।


0

तालिका पंक्ति में एक तत्व के लिए, JQuery का उपयोग उस पंक्ति को प्राप्त करने के लिए करें जिसे आप चाहते हैं , और इसके बजाय केवल उस पंक्ति को स्क्रॉल करें।

मान लीजिए कि मेरे पास एक तालिका में कई पंक्तियाँ हैं, जिनमें से कुछ की समीक्षा और व्यवस्थापक को करनी चाहिए। प्रत्येक पंक्ति की समीक्षा की आवश्यकता होती है और समीक्षा के लिए आपको पिछले या अगले आइटम पर ले जाने के लिए ऊपर और नीचे दोनों तीर होते हैं।

यहां एक पूर्ण उदाहरण है कि यदि आपको नोटपैड में एक नया HTML दस्तावेज़ बनाना है और इसे सहेजना है तो बस चलना चाहिए। समीक्षा के लिए हमारी वस्तुओं के ऊपर और नीचे का पता लगाने के लिए अतिरिक्त कोड है ताकि हम कोई त्रुटि न करें।

<html>
<head>
    <title>Scrolling Into View</title>
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
    <style>
        div.scroll { height: 6em; width: 20em; overflow: auto; }
        thead th   { position: sticky; top: -1px; background: #fff; }
        .up, .down { cursor: pointer; }
        .up:hover, .down:hover { color: blue; text-decoration:underline; }
    </style>
</head>
<body>
<div class='scroll'>
<table border='1'>
    <thead>
        <tr>
            <th>Review</th>
            <th>Data</th>
        </tr>
    </thead>
    <tbody>
        <tr id='row_1'>
            <th></th>
            <td>Row 1 (OK)</td>
        </tr>
        <tr id='row_2'>
            <th></th>
            <td>Row 2 (OK)</td>
        </tr>
        <tr id='row_3'>
            <th id='jump_1'><span class='up'>UP</span> <span class='down'>DN</span></th>
            <td>Row 3 (REVIEW)</td>
        </tr>
        <tr id='row_4'>
            <th></th>
            <td>Row 4 (OK)</td>
        </tr>
        <tr id='row_5'>
            <th id='jump_2'><span class='up'>UP</span> <span class='down'>DN</span></th>
            <td>Row 5 (REVIEW)</td>
        </tr>
        <tr id='row_6'>
            <th></th>
            <td>Row 6 (OK)</td>
        </tr>
        <tr id='row_7'>
            <th></th>
            <td>Row 7 (OK)</td>
        </tr>
        <tr id='row_8'>
            <th id='jump_3'><span class='up'>UP</span> <span class='down'>DN</span></th>
            <td>Row 8 (REVIEW)</td>
        </tr>
        <tr id='row_9'>
            <th></th>
            <td>Row 9 (OK)</td>
        </tr>
        <tr id='row_10'>
            <th></th>
            <td>Row 10 (OK)</td>
        </tr>
    </tbody>
</table>
</div>
<script>
$(document).ready( function() {
    $('.up').on('click', function() {
        var id = parseInt($(this).parent().attr('id').split('_')[1]);
        if (id>1) {
            var row_id = $('#jump_' + (id - 1)).parent().attr('id').split('_')[1];
            document.getElementById('row_' + (row_id-1)).scrollIntoView({behavior: 'smooth', block: 'start'});
        } else {
            alert('At first');
        }
    });

    $('.down').on('click', function() {
        var id = parseInt($(this).parent().attr('id').split('_')[1]);
        if ($('#jump_' + (id + 1)).length) {
            var row_id = $('#jump_' + (id + 1)).parent().attr('id').split('_')[1];
            document.getElementById('row_' + (row_id-1)).scrollIntoView({behavior: 'smooth', block: 'start'});
        } else {
            alert('At last');
        }
    });
});
</script>
</body>
</html>

-1

विशिष्ट तत्व नीचे स्क्रॉल करने के लिए सरल समाधान

const element = document.getElementById("element-with-scroll");
element.scrollTop = element.scrollHeight - 10;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.