কৌণিক 4 এ ক্লিক করে উপাদানটিতে স্ক্রোল করুন


110

যখন একটি বোতাম টিপানো হয় তখন আমি কোনও লক্ষ্যে স্ক্রোল করতে সক্ষম হতে চাই। আমি এই জাতীয় কিছু ভাবছিলাম।

<button (click)="scroll(#target)">Button</button>

এবং আমার component.tsপদ্ধতিতে।

scroll(element) {
    window.scrollTo(element.yPosition)
}

আমি জানি যে উপরের কোডটি বৈধ নয় তবে কেবল আমি কী ভাবছিলাম তা দেখানোর জন্য। আমি কৌনিক 4 টি শিখতে শুরু করেছি অ্যাঙ্গুলারের কোনও পূর্ব অভিজ্ঞতা নেই। আমি এ জাতীয় কিছু অনুসন্ধান করে চলেছি তবে সমস্ত উদাহরণ AngularJs এ যা কৌণিক 4 এর সাথে অনেকটাই আলাদা


4
আপনার সিনট্যাক্সে সমস্যা নেই তবে আপনাকে # ডেটেজ কী তা নির্ধারণ করতে হবে।

4
সুতরাং এই কাজ করা উচিত? যখন আমি একটি স্বেচ্ছাসেবী নম্বর ব্যবহার করি এবং আমার ফাংশনে উইন্ডো.স্ক্রোলটো (500) কল করি তখন কিছুই হয় না। আমি ভাবছিলাম যে উপাদানটি এইচটিএমলেমেন্ট হবে

ঠিক আছে, তবে, # তরজেট কী, কৌনিক এটি সমাধান করবে না? আপনি প্রথমে কোনও প্যারামিটার না দিয়ে স্ক্রোল () পরীক্ষা করতে পারেন।
ওয়ানড্রিম

হ্যাঁ আমি আমার বোতামে এবং

4
তবে যখন আমি 500

উত্তর:


161

আপনি এটি এইভাবে করতে পারে:

<button (click)="scroll(target)"></button>
<div #target>Your target</div>

এবং তারপরে আপনার উপাদানটিতে:

scroll(el: HTMLElement) {
    el.scrollIntoView();
}

সম্পাদনা: আমি মন্তব্যগুলি দেখছি যে এই উপাদানটির অপরিজ্ঞাপিত হওয়ার কারণে এটি আর কাজ করে না। আমি কৌণিক 7 এ একটি স্ট্যাকব্লিটজ উদাহরণ তৈরি করেছি এবং এটি এখনও কার্যকর হয়। কেউ দয়া করে উদাহরণ প্রদান করতে পারেন যেখানে এটি কাজ করে না?


4
@ N15M0_jk হ্যাঁ, আপনার প্রয়োজনের উপর নির্ভর করে আপনি অন্য বিকল্পগুলির সাথে পাস করতে পারেন এমন একটি জিনিসও রয়েছে। বিকাশকারী.মোজিলা.আর.ইন-
ফ্র্যাঙ্ক মোডিকা

4
@ অ্যান্টনি এটি আপনাকে উপাদানটির scrollফাংশনে যে উপাদানটি দিতে চান তা উল্লেখ করতে সহায়তা করে । লক্ষ্য করুন যে ক্লিক ইভেন্টটি কল করে scroll(target)। আপনি যদি উপাদানটি পাস না করে উপাদানটির ভিতরে থেকে উপাদানটিতে অ্যাক্সেস পেতে চান, আপনি ব্যবহার করতে পারেন @ViewChild
ফ্রাঙ্ক মোডিকা

4
এটা এখন আমার সাথে ভাল কাজ করে। তবে আমি একটি নির্বোধ ভুল করার id="target"পরিবর্তে #targetএবং এর পরিবর্তে ব্যবহার করার আগে এবং এটি আমাকে "এল ইন্ডিফাইন্ড ত্রুটি" দিয়েছে!
yashthakkar1173

4
আমি বিশ্বাস করি যে উপাদানটির সাথে উপাদানটি যদি #targetঅভ্যন্তরের ভিতরে থাকে তবে অপরিবর্তিত ত্রুটি ঘটবে তবে *ngIfআপনি @ViewChild@ abbastec থেকে লিঙ্কটিতে পদ্ধতিটি ব্যবহার করলে এটি কাজ করা উচিত
দর্শনীয়

4
সহজ এবং ঝরঝরে। আমার জন্য কৌণিক 10
গ্রিফিনলেউ

53

এখানে আমি Angular 4 ব্যবহার করে এটি কীভাবে করেছি।

টেমপ্লেট

<div class="col-xs-12 col-md-3">
  <h2>Categories</h2>
  <div class="cat-list-body">
    <div class="cat-item" *ngFor="let cat of web.menu | async">
      <label (click)="scroll('cat-'+cat.category_id)">{{cat.category_name}}</label>
    </div>
  </div>
</div>

উপাদানটিতে এই ফাংশনটি যুক্ত করুন

scroll(id) {
  console.log(`scrolling to ${id}`);
  let el = document.getElementById(id);
  el.scrollIntoView();
}

4
আপনি আপনার টেম্পলেটটিতে উপাদান রেফ বা এইচটিএমএল আইড সেট করেন নি। আপনি যেখানে 'স্ক্রল করছেন' বিড়াল - '+ ক্যাট ক্যাটাগরি_আইডিটি ঠিক কোথায়?
কেগান

4
এটি একটি ভাল উত্তর। আপনি অন্য উপাদানটিতে স্ক্রোলটি রাখতে পারেন।
ডেল

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। কৌণিক 9 এর জন্য কাজ করা
ষোল

49

বাস্তবে এমন কোনো একটি বিশুদ্ধ জাভাস্ক্রিপ্ট উপায় ব্যবহার না করেই এই কাজ করা সম্ভব হয় setTimeoutবা requestAnimationFrameবা jQuery এর।

সংক্ষেপে, আপনি যে স্ক্রোল করতে এবং ব্যবহার করতে চান তাতে স্ক্রোলভিউতে উপাদানটি সন্ধান করুন scrollIntoView

el.scrollIntoView({behavior:"smooth"});

এখানে একজন বরখাস্ত


4
এই উত্তরটি পৃথক করার জন্য 2 টি উপায়: 1. এটি অ্যানিমেটেড মসৃণ স্ক্রোলিং, কোনও লাফ নয়। ২. এই উত্তরটি কোনও উইন্ডো স্ক্রোল করে না, তবে একটি উইন্ডোর মধ্যে একটি স্ক্রোলভিউ স্থানান্তর করে। উদাহরণস্বরূপ, যদি আপনার উইন্ডোর মধ্যে একটি অনুভূমিক স্ক্রোলভিউ থাকে। উদাহরণস্বরূপ প্লাঙ্কার পরীক্ষা করুন।
জন

4
স্ক্রোলইন্টোভিউর স্ক্রোলআইন্টোভিউঅপশনস (যুক্তি হিসাবে বস্তু) কেবলমাত্র এখনই ফায়ারফক্সের সাথে সামঞ্জস্যপূর্ণ।
জেসেস ফুয়েন্তেস

ক্রোম এবং ফায়ারফক্সের জন্য দুর্দান্ত কাজ করে তবে সাফারির জন্য নয়।
ইয়ামশিরো

37

কৌণিক 7 এ নিখুঁত কাজ করে

এইচটিএমএল

<button (click)="scroll(target)">Click to scroll</button>
<div #target>Your target</div>

উপাদান মধ্যে

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

4
{আচরণের জন্য বোনাস: 'মসৃণ'}
স্কোয়াপল রেসিপি

এটি আমার পক্ষে কাজ করছে {আচরণের জন্য বিশেষ ধন্যবাদ: 'মসৃণ'}
বিভূ কুমার

4
#targetবোতামটির পরে সংজ্ঞায়িত করা থাকলে এটি কাজ করবে না , যা যদি আপনার কাছে উদাহরণস্বরূপ একটি ভাসমান শিরোলেখ থাকে তবে এটি প্রাসঙ্গিক ...
জোনাথন

22

জনের সঠিক উত্তর রয়েছে এবং এটি আমার কৌণিক 5 এবং 6 প্রকল্পে কাজ করে।

আমি যদি নাবার থেকে পাদচরণে সহজে স্ক্রোল করতে ক্লিক করতে চাইতাম:

<button (click)="scrollTo('.footer')">ScrolltoFooter</button>
<footer class="footer">some code</footer>

scrollTo(className: string):void {
   const elementList = document.querySelectorAll('.' + className);
   const element = elementList[0] as HTMLElement;
   element.scrollIntoView({ behavior: 'smooth' });
}

আমি পাদলেখ থেকে শিরোনামে ফিরে স্ক্রোল করতে চেয়েছিলাম, তাই আমি একটি পরিষেবা তৈরি করেছি যা এই ফাংশনটি অবস্থিত এবং এটি এটিকে নাবার এবং পাদচরণের উপাদানগুলিতে ইনজেকশনের পরে যেখানে প্রয়োজন সেখানে 'শিরোলেখ' বা 'পাদলেখের' পাশ করে। শুধু মনে রাখবেন প্রকৃতপক্ষে উপাদানগুলির ঘোষণাগুলি দেওয়া ক্লাসের নামগুলি:

<app-footer class="footer"></app-footer>

15

কৌণিক ক্ষেত্রে এটি করার আরেকটি উপায়:

মার্কআপ:

<textarea #inputMessage></textarea>

যোগ ViewChild()সম্পত্তি:

@ViewChild('inputMessage')
inputMessageRef: ElementRef;

scrollIntoView()ফাংশনটি ব্যবহার করে উপাদানটির অভ্যন্তরের যে কোনও জায়গায় আপনি স্ক্রোল করুন :

this.inputMessageRef.nativeElement.scrollIntoView();

12

আপনি নীচের কোড ব্লকটি ব্যবহার করে আপনার ভিউটিতে কোনও উপাদান রেফারিতে স্ক্রোল করতে পারেন। লক্ষ্য করুন যে লক্ষ্য (এলিমেন্টেরফ আইডি ) কোনও বৈধ এইচটিএমএল ট্যাগে থাকতে পারে।

ভিউতে (এইচটিএমএল ফাইল)

<div id="target"> </div>
<button (click)="scroll()">Button</button>
 

  

উপর .tsফাইল,

scroll() {
   document.querySelector('#target').scrollIntoView({ behavior: 'smooth', block: 'center' });
}

7

আপনি নিম্নলিখিত হিসাবে কৌণিক DOM উপাদান রেফারেন্স ব্যবহার করে তা অর্জন করতে পারেন:

স্ট্যাকব্লিটজ- এর উদাহরণ এখানে

উপাদান টেমপ্লেট:

<div class="other-content">
      Other content
      <button (click)="element.scrollIntoView({ behavior: 'smooth', block: 'center' })">
        Click to scroll
      </button>
    </div>
    <div id="content" #element>
      Some text to scroll
</div>

7

কৌণিক ক্ষেত্রে আপনি ব্যবহার করতে পারেন ViewChildএবং ElementRef: আপনার এইচটিএমএল উপাদানকে একটি রেফ দিন

<div #myDiv > 

এবং আপনার উপাদান ভিতরে:

import { ViewChild, ElementRef } from '@angular/core';
@ViewChild('myDiv') myDivRef: ElementRef;

আপনি this.myDivRef.nativeElementআপনার উপাদান পেতে পেতে ব্যবহার করতে পারেন


এটি একটি ভাল সমাধান তবে সমস্যাটি কেবল তখনই কাজ করে যখন আমি ট্যাবটি পুনরায় লোড করি তবে রাউটারলিঙ্ক দিয়ে নয়। এই সমস্যার জন্য কোন সমাধান বলছি?
আহসান

0

আমার এই কৌশলটি করা দরকার, কারণ আমি কাস্টম এইচটিএমএল উপাদান ব্যবহার করি। আমি এই কাজ না থাকে, তাহলে targetonItemAmounterClickথাকবে না scrollIntoViewপদ্ধতি

.html

<div *ngFor"...">
      <my-component #target (click)="clicked(target)"></my-component>
</div>

.ts

onItemAmounterClick(target){
  target.__ngContext__[0].scrollIntoView({behavior: 'smooth'});
}

-8

আপনি উপাদানটি যেমন (যেমন document.getElementById(...)) সন্ধানের জন্য jQuery ব্যবহার করে এবং .focus()কলটি ব্যবহার করে যা জিজ্ঞাসা করছেন তার মতো কিছু করেছি ।


4
কৌণিক ব্যবহার করার সময় কি jQuery এর সত্যই প্রয়োজন?

100% নিশ্চিত নয় তবে আমি এমন একটি পরিবেশে ছিলাম যা Angular2 এর জন্য বৈধতা এবং রিফ্যাক্টর করা হয়নি তাই আমি কৌণিক ক্ষেত্রে সমাধানের জন্য খুব বেশি কঠোর অনুসন্ধান করিনি এবং কেবল এমন কিছু দিয়েছিলাম যা আমি জানতাম যে আমার অ্যাক্সেস থাকবে।
কেনেথ

8
আপনার Jquery এবং কৌণিক ব্যবহার করা উচিত নয়
স্টেফডেলিক

4
হ্যাঁ হ্যাঁ, আমি অনেক কিছু শিখেছি এবং প্রত্যেকেই মন্তব্য করেছে যে আমার jQuery ব্যবহার করা উচিত নয়। আপনি এমন কিছু বলছেন না যা অন্যরা আপনার উপরে ঠিক মন্তব্য করেছে না।
কেনেথ সালোমন

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

-17

আপনি jquery ব্যবহার করে এটি করতে পারেন:

টিএস কোড:

    scrollTOElement = (element, offsetParam?, speedParam?) => {
    const toElement = $(element);
    const focusElement = $(element);
    const offset = offsetParam * 1 || 200;
    const speed = speedParam * 1 || 500;
    $('html, body').animate({
      scrollTop: toElement.offset().top + offset
    }, speed);
    if (focusElement) {
      $(focusElement).focus();
    }
  }

এইচটিএমএল কোড:

<button (click)="scrollTOElement('#elementTo',500,3000)">Scroll</button>

আপনি যে উপাদানগুলিতে স্ক্রোল করতে চান তাতে এটি প্রয়োগ করুন:

<div id="elementTo">some content</div>

এখানে একটি স্ট্যাকব্লিটজ নমুনা।


4
এই বিকল্পটি কোনও অপ্রচলিত কাঠামোর সাথে কাজ করে না (টাইপ স্ক্রিপ্ট) টাইপস্ক্রিপ্ট সমাধানের জন্য জিজ্ঞাসা করে
অ্যাশ

এটি টাইপস্ক্রিপ্ট সমাধান।
Gns

4
আপনি আমার বক্তব্য মিস করেছেন, আপনার উত্তরটি কেবল ইএস * ব্যবহার না করে jQuery (আমি সবচেয়ে অদক্ষ উপায়ে যুক্ত করতে পারি) ব্যবহার করি। আপনার ধ্রুবকগুলি তাদের প্রকারটিও ঘোষণা করে না। এটি jQuery ব্যবহার করে খারাপ যুক্তিযুক্ত একটি খারাপ উদাহরণ যা জিজ্ঞাসা করা হয়নি তা নয়।
ছাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.