স্ক্রোলআইন্টিভিউ স্ক্রলগুলি খুব দূরে


113

আমার একটি পৃষ্ঠা রয়েছে যেখানে ডাবের সাথে টেবিল সারিযুক্ত একটি স্ক্রোল বার ডাটাবেস থেকে গতিশীলভাবে উত্পন্ন হয়। প্রতিটি টেবিল সারি একটি লিঙ্কের মতো কাজ করে, যাতে আপনি ভিডিও প্লেয়ারের পাশের ইউটিউব প্লেলিস্টে দেখতে চান।

কোনও ব্যবহারকারী পৃষ্ঠাটি দেখার সময়, তারা যে বিকল্পটিতে রয়েছে তা স্ক্রোলিং ডিভের শীর্ষে যাওয়ার কথা। এই কার্যকারিতা কাজ করছে। বিষয়টি হ'ল এটি খুব দূরে চলে যায়। তারা যে বিকল্পটিতে রয়েছে তা 10px খুব বেশি। সুতরাং, পৃষ্ঠাটি পরিদর্শন করা হয়েছে, ইউআরএলটি কোন বিকল্পটি নির্বাচন করা হয়েছে তা চিহ্নিত করতে ব্যবহার করা হবে এবং তারপরে স্ক্রলিং ডিভের শীর্ষে সেই বিকল্পটি স্ক্রোল করে। দ্রষ্টব্য: এটি উইন্ডোর জন্য স্ক্রোল বার নয়, এটি একটি স্ক্রোলবার সহ একটি ডিভ।

নির্বাচিত বিকল্পটি ডিভের শীর্ষে স্থানান্তরিত করতে আমি এই কোডটি ব্যবহার করছি:

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

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

el.scrollIntoView(true);

এটি ডিভের শীর্ষে চলে যায় তবে প্রায় 10 পিক্সেল খুব বেশি উপরে। যে কেউ কিভাবে এটি ঠিক করতে জানেন?


49
এর জন্য অফসেট কনফিগারেশনের অভাব scrollIntoViewবিরক্তিকর।
mystrdat

উত্তর:


59

যদি এটি প্রায় 10px হয়, তবে আমি অনুমান করি যে আপনি কেবল স্বয়ংক্রিয়ভাবে divএর স্ক্রলটিকে অফসেটের মতো করে নিজেই সামঞ্জস্য করতে পারেন:

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

4
এটির মতো একই অ্যানিমেটেড প্রভাব থাকবে scrollIntoView?
1252748

4
@ থমাস আফাইক, প্লেইন ডোম scrollIntoViewফাংশন অ্যানিমেশনের কারণ নয় does আপনি কি স্ক্রোলআইন্টোভিউ jQuery প্লাগইন সম্পর্কে কথা বলছেন?
লুকাস ট্রজেসনিউস্কি

4
এই মানুষটি কাজ করেছিল, এটি ভুল দিক ব্যতীত আমাকে যা করতে হয়েছিল তা হ'ল + = 10 থেকে - = 10 করা এবং এখন এটি ঠিক ঠিক লোড হচ্ছে, সহায়তার জন্য অনেক ধন্যবাদ !!!!
ম্যাথু উইলসন

18
এটি সঞ্চারিত করতে পারে, কেবল যোগ করতে পারে el.scrollIntoView({ behavior: 'smooth' });। সমর্থন যদিও দুর্দান্ত না!
ডেভাস্পিনাল

4
@ কার্নোকোড আমার মনে হয় আপনি বোঝাতে চেয়েছিলেনblock:'center'
সানিয়াম জৈন

127

মসৃণভাবে একটি সঠিক অবস্থানে স্ক্রোল করুন

সঠিক 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'});

4
এটি সর্বাধিক সঠিক উত্তর - আমরা সহজেই স্ক্রোলের অবস্থানটি jQuery('#el').offset().topতারপরে এবং তারপরে ব্যবহার করতে পারিwindow.scrollTo
আলেকজান্ডার গনচরভ

4
এই সমাধানের জন্য +1। এটি যখন আমাকে একটি শীর্ষ অফসেটের সাথে সম্পর্কিত পাত্রযুক্ত অবস্থিত তখন এটি সঠিকভাবে উপাদানটিতে স্ক্রোল করতে আমাকে সহায়তা করেছিল।
লিগা

প্রতিক্রিয়া রাউটারের সাথে হ্যাশলিঙ্ক ব্যবহার করে যে কেউ এখানে আসছেন, এটি আমার পক্ষে কাজ করেছিল। আপনার হ্যাশলিঙ্কে স্ক্রোল প্রপ scroll={el => { const yCoordinate = el.getBoundingClientRect().top + window.pageYOffset; const yOffset = -80; window.scrollTo({ top: yCoordinate + yOffset, behavior: 'smooth' }); }}- - যেখানে অফসেটটি কেবল আরও ভাল স্পেসিংয়ের জন্য আপনার শিরোনামের আকারের চেয়ে 10-15 পিক্সেল বেশি
রব বি

87

আপনি এটি দুটি পদক্ষেপে করতে পারেন:

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

24
যদি রানের scrollIntoView()আগে স্ক্রোলিং শেষ না করে থাকে scrollBy()তবে পরবর্তী স্ক্রোলটি পূর্বেটিকে বাতিল করে দেবে। কমপক্ষে ক্রোম 71 এ
ডেভ হিউজেস

4
: এই ক্ষেত্রে নীচে উত্তর দেখা setTimeout ব্যবহার stackoverflow.com/a/51935129/1856258 .. আমার জন্য তা সময়সীমা সমাপ্ত ছাড়া কাজ করে। ধন্যবাদ!
লেওল

অ্যাপ্লিকেশনটিকে প্রাসঙ্গিকভাবে সরাসরি স্থানটিতে নিয়ে যাওয়ার জন্য কোনও পিক্সেলের সংশোধককে সরাসরি স্ক্রোলইন্টোভিউতে ইনজেক্ট করার কোনও উপায় আছে কি? মত scrollIntoView({adjustment:y}), আমি মনে করি এটি শেষে কোনও কাস্টম কোড
দিয়েই

83

সম্পূর্ণ পদ্ধতি দ্বারা অবস্থান অ্যাঙ্কর

এটি করার আরেকটি উপায় হ'ল আপনার অ্যাঙ্করগুলিকে অফসেটের মাধ্যমে স্ক্রোলিংয়ের উপর নির্ভর না করে ঠিক যেখানে পৃষ্ঠায় আপনি চান সেখানে অবস্থান করা। আমি এটি প্রতিটি উপাদানের জন্য আরও ভাল নিয়ন্ত্রণের অনুমতি পেয়েছি (যেমন আপনি যদি কিছু উপাদানগুলির জন্য আলাদা অফসেট চান তবে) এবং ব্রাউজারের এপিআই পরিবর্তন / পার্থক্যের প্রতিরোধীও হতে পারে।

<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
এটিকে সহজ ও সরলভাবে বাস্তবায়নের সর্বোত্তম উপায় the
22

4
আমার মনে হয় সবচেয়ে ভাল এবং সবচেয়ে স্থানীয় পদ্ধতি native
Пронин

4
এটি এত সহজ এবং চতুর। অন্যদের মধ্যে অনেকে কেবল অপ্রয়োজনীয় জেএস যোগ করেন।
রেডস্যান্ডস

4
এটি বিশেষত কার্যকর যখন "পৃষ্ঠার শীর্ষ" প্রকারের লিঙ্কটি এনএভি বারের নীচে থাকে এবং আপনি এনএভি প্রদর্শন করতে চান তবে অন্য কোনও লিঙ্ক অফসেট চান না
জো মুন

নেতিবাচক মার্জিন-টপ ব্যবহার করে আপনি একই অর্জন করতে পারেন, আপনি অবস্থানের সাথে অন্যের সাথে উপাদানটি মোড়ানো থেকে বিরত থাকতে পারেন
সের্গি

22

আমি এই সমস্যাটি ব্যবহার করে সমাধান করেছি,

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

এটি উপাদানটিকে centerস্ক্রোলিংয়ের পরে উপস্থিত হতে দেয় , সুতরাং আমাকে গণনা করতে হবে না yOffset

আশা করি এটা সাহায্য করবে...


4
আপনি ব্যবহার করা উচিত scrollToনয় elementকিন্তু উপরwindow
Arseniy দ্বিতীয়

@ আর্সেনিয় -২ ধন্যবাদ জানানোর জন্য ধন্যবাদ !! আমি সেই অংশটি মিস করেছি!
ইমতিয়াজ শাকিল সিদ্দিক

ব্লক শীর্ষে সাহায্য করে?
অশোক কুমার গণেশান

15

এটি ক্রোমে আমার জন্য কাজ করে (মসৃণ স্ক্রোলিং সহ এবং কোনও টাইমিং হ্যাক নেই)

এটি কেবল উপাদানটি সরিয়ে নিয়ে যায়, স্ক্রোলটি সূচনা করে, তারপরে এটিকে আবার সরিয়ে দেয়।

উপাদানটি ইতিমধ্যে স্ক্রিনে থাকলে কোনও দৃশ্যমান "পপিং" নেই is

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

পূর্ববর্তী উত্তরের ভিত্তিতে, আমি একটি কৌণিক 5 প্রকল্পে এটি করছি doing

এর সাথে শুরু:

// 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+ এ পুরোপুরি কাজ করে। আমি এফএফ তে পরীক্ষা করিনি। 500 মিমি হ'ল সংক্ষেপতম বিলম্ব আমি উদ্যোগটি করব। মসৃণ স্ক্রোলটি এখনও সম্পূর্ণ না হওয়ায় কখনও কখনও নীচে যেতে ব্যর্থ হয়। আপনার নিজের প্রকল্পের জন্য প্রয়োজনীয় হিসাবে সামঞ্জস্য করুন।

এই সহজ তবে কার্যকর সমাধানের জন্য ফ্রেড 727 +1 করুন ।


7
এটি কোনও উপাদানটিতে স্ক্রোলটি মসৃণ করতে কিছুটা ঝাঁকুনি অনুভব করে এবং তারপরে কিছুটা পরে স্ক্রোল করে।
22

7

ধরে নিই যে আপনি ডিওএম-তে একই স্তরের সমস্ত ডিভগুলিতে স্ক্রোল করতে চান এবং ক্লাসের নাম "স্ক্রোল-অফ-অফসেট" আছে, তবে এই সিএসএসটি সমস্যার সমাধান করবে:

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

পৃষ্ঠার শীর্ষ থেকে অফসেটটি 100px। এটি কেবলমাত্র ব্লক: 'শুরু' হিসাবে লক্ষ্য হিসাবে কাজ করবে:

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

যা ঘটছে তা হল ডিভসের শীর্ষস্থানটি স্বাভাবিক অবস্থানে তবে তাদের অভ্যন্তরীণ বিষয়বস্তুগুলি স্বাভাবিক অবস্থানের নীচে 100px শুরু করে। প্যাডিং-টপ: এটিই হচ্ছে 100px। মার্জিন-নীচে: -100px নীচের ডিভের অতিরিক্ত মার্জিনটি অফসেট করতে হবে। সমাধানটি সম্পূর্ণ করতে শীর্ষস্থানীয় এবং নীচে-সর্বাধিক ডিভগুলির জন্য মার্জিন / প্যাডিংস অফসেট করতে এই সিএসএস যুক্ত করুন:

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

6

এই সমাধানটি @ আরসেনিয় -২ এর অন্তর্গত , আমি এটিকে কেবল একটি ফাংশনে সরলীকৃত করেছি।

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

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

ব্যবহার (আপনি সরাসরি স্ট্যাকওভারফ্লোতে কনসোলটি খুলতে পারেন এবং এটি পরীক্ষা করে দেখতে পারেন):

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


4

সুতরাং, সম্ভবত এটি কিছুটা আড়ষ্ট কিন্তু এতদূর এত ভাল। আমি কৌনিক 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>

আমি অফসেটটি মার্জিন এবং প্যাডিং শীর্ষের সাথে সামঞ্জস্য করি।

সালুডোস!


3

আমি এটি পেয়েছি এবং এটি আমার জন্য দুর্দান্তভাবে কাজ করে:

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

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

আশা করি এটা সাহায্য করবে.


3

আর একটি সমাধান হ'ল "অফসেটটপ" ব্যবহার করা যেমন:

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

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

1

একটি কার্যকর সমাধান খুঁজে পেয়েছি। বলুন যে আপনি উদাহরণস্বরূপ এখানে একটি ডিভ, এলিমেন্টে স্ক্রোল করতে চান এবং আপনি এটির উপরে 20px ব্যবধান রাখতে চান। রেফটিকে তার উপরে তৈরি ডিভের জন্য সেট করুন:

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

এটি করা আপনার পছন্দসই এই ফাঁক তৈরি করবে।

যদি আপনার একটি শিরোনাম থাকে তবে শিরোনামের পিছনে খালি ডিভিও তৈরি করুন এবং এটি শিরোনামের উচ্চতার সমান উচ্চতা নির্ধারণ করুন এবং এটি উল্লেখ করুন।


0

আমার মূল ধারণাটি সেই ভিউর উপরে একটি টেম্পডিভ তৈরি করছে যা আমরা স্ক্রোল করতে চাই। এটি আমার প্রকল্পে পিছিয়ে না রেখে ভাল কাজ করে।

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

আরসেনিয় -২ এর উত্তরের ভিত্তিতে: আমার ব্যবহার-কেস ছিল যেখানে স্ক্রোলিং সত্তা উইন্ডো নিজেই নয় বরং একটি অভ্যন্তরীণ টেম্পলেট ছিল (এই ক্ষেত্রে একটি ডিভ)। এই দৃশ্যে আমাদের স্ক্রোলিং ধারকটির জন্য একটি আইডি সেট 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 সেন্ট।

আমি উপাদানটি থেকে কিছুটা আগে স্ক্রোলআইন্টোভিউ স্ক্রোল করার বিষয়টিও করেছি, সুতরাং আমি একটি স্ক্রিপ্ট তৈরি করেছি (নেটিভ জাভাস্ক্রিপ্ট) যা একটি উপাদানকে গন্তব্যে প্রেন্ডেন্ড করে, এটিকে CSS সহ শীর্ষে রেখে কিছুটা স্ক্রোল করে। স্ক্রোল করার পরে, আমি আবার তৈরি উপাদানগুলি সরিয়ে ফেলি।

এইচটিএমএল:

//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

যারা এই সমস্যাটিকে উপরের সমাধানগুলির সাথে সমাধান করেননি তাদের জন্য আমি এই CSS টিপস যুক্ত করছি:

#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

ইউপিডি: আমি একটি এনপিএম প্যাকেজ তৈরি করেছি যা নিম্নলিখিত সমাধানের থেকে আরও কার্যকর এবং সহজে ব্যবহারযোগ্য।

আমার স্মুথস্ক্রোল ফাংশন

আমি স্টিভ ব্যান্টনের দুর্দান্ত সমাধান নিয়েছি এবং একটি ফাংশন লিখেছি যা এটি ব্যবহার করা আরও সুবিধাজনক করে তুলেছে। আমি আগে যেমন চেষ্টা করেছি ঠিক window.scroll()তেমনি ব্যবহার করা এমনকি window.scrollBy()সহজতরও হবে তবে এই দু'জনের কিছু সমস্যা রয়েছে:

  • এগুলি একটি মসৃণ আচরণের সাথে ব্যবহার করার পরে সবকিছু জঞ্জাল হয়ে যায়।
  • আপনি এগুলি যে কোনও উপায়ে আটকাতে পারবেন না এবং স্ক্রোলটির এবং তার আগে পর্যন্ত অপেক্ষা করতে হবে। সুতরাং আমি আশা করি আমার কাজটি আপনার জন্য কার্যকর হবে। এছাড়াও, একটি হালকা ওজনের পলিফিল রয়েছে যা এটি সাফারি এবং এমনকি আইইতে কাজ করে।

কোডটি এখানে

কেবল এটি অনুলিপি করুন এবং আপনি কখন চান তা নিয়ে গণ্ডগোল করুন।

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এমডিএন আরও পড়ুন

অবশেষে

আপনার প্রয়োজন অনুসারে স্মুথস্ক্রোল ফাংশন সামঞ্জস্য করুন।

উদাহরণস্বরূপ, যদি আপনার কিছু স্থির শিরোনাম থাকে (বা আমি এটি শব্দটি দিয়ে ডাকি masthead) আপনি এটির মতো কিছু করতে পারেন:

const mastheadEl = document.querySelector(someMastheadSelector);

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

const EXTRA_OFFSET = mastheadEl.offsetHeight - 3;

আপনার যদি এ জাতীয় মামলা না থাকে তবে কেবল এটি মুছুন, কেন নয় :-D।


-1

নির্দিষ্ট উপাদান নীচে স্ক্রোল করার সহজ সমাধান

const element = document.getElementById("element-with-scroll");
element.scrollTop = element.scrollHeight - 10;

-1

টেবিল সারির একটি উপাদানের জন্য, আপনি যা চান তার উপরে সারিটি পেতে JQuery ব্যবহার করুন এবং তার পরিবর্তে কেবল সারিটিতে স্ক্রোল করুন।

ধরুন আমার একটি টেবিলে একাধিক সারি রয়েছে, যার কয়েকটি অ্যাডমিন দ্বারা পর্যালোচনা করা উচিত। প্রতিটি সারিতে পর্যালোচনার প্রয়োজন হয় আপনাকে পর্যালোচনার জন্য পূর্বের বা পরবর্তী আইটেমটিতে নিয়ে যাওয়ার জন্য উভয় এবং উপরে এবং নীচে তীর থাকে।

এখানে একটি সম্পূর্ণ উদাহরণ যা কেবলমাত্র যদি আপনি নোটপ্যাডে একটি নতুন এইচটিএমএল ডকুমেন্ট তৈরি করেন এবং এটি সংরক্ষণ করেন তবে চালানো উচিত। পর্যালোচনার জন্য আমাদের আইটেমগুলির উপরে এবং নীচে সনাক্ত করার জন্য অতিরিক্ত কোড রয়েছে যাতে আমরা কোনও ত্রুটি না ফেলে।

<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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.