Jadual Kandungan
Parsing Markdown dan Generasi HTML
Menjana jadual kandungan
Melaksanakan pemerhati persimpangan
Menatal lancar dan pengendalian klik pautan
Menghidupkan jadual kandungan dengan vue.js
Rumah hujung hadapan web tutorial css Parsing markdown ke dalam jadual kandungan automatik

Parsing markdown ke dalam jadual kandungan automatik

Apr 01, 2025 am 04:21 AM

Tutorial ini menunjukkan mewujudkan jadual kandungan interaktif untuk kandungan markdown jangka panjang. Ia memanfaatkan beberapa teknik untuk meningkatkan pengalaman pengguna, termasuk parsing markdown, pemerhati persimpangan untuk pengesanan seksyen aktif, animasi menatal yang lancar, dan peralihan Vue.js untuk kemas kini senarai animasi.

Parsing markdown ke dalam jadual kandungan automatik

Jadual kandungan menyediakan navigasi cepat dalam satu halaman. Ini amat berguna untuk artikel yang panjang, menawarkan pengguna gambaran yang jelas dan akses mudah ke bahagian yang berbeza. Panduan ini memperincikan bagaimana untuk mengubah teks markdown ke dalam jadual HTML kandungan dengan tajuk yang dipautkan, menonjolkan bahagian yang dilihat sekarang. Kami juga akan melaksanakan kemas kini senarai tatal dan animasi yang lancar menggunakan Vue.js.

Parsing Markdown dan Generasi HTML

Kandungan web sering menggunakan markdown. Kami akan menggunakan perpustakaan marked (walaupun alternatif sesuai) untuk menghuraikan markdown ke HTML. Kandungan markdown diambil dari inti github. Fungsi marked menukarkan teks markdown yang diambil ke HTML, yang kemudian disuntik ke dalam DOM.

 fungsi async fetchandparsemarkdown () {
  const const url = 'https://gist.githubusercontent.com/lisilinhart/E9DCF5298adff7c2a4da9ce2a3db3f/raw/2f1a0d47eba64756560b5d2919d45d45d45d45d45d45d45d45d45d45d45d45d45d4.
  tindak balas const = menunggu pengambilan (url);
  const data = menunggu tindak balas.teks ();
  const htmlfrommarkdown = ditandakan (data, {sanitize: true});
  kembali htmlfrommarkdown;
}
Salin selepas log masuk

HTML yang dihuraikan dimasukkan ke dalam elemen DOM yang ditetapkan menggunakan innerHTML .

 fungsi async init () {
  const $ main = document.QuerySelector ('#app');
  const htmlcontent = menunggu fetchandParsemarkdown ();
  $ main.innerHtml = htmlcontent;
}

init ();
Salin selepas log masuk

Menjana jadual kandungan

Langkah seterusnya adalah untuk membuat jadual kandungan dari tajuk (H1 dan H2) dalam HTML yang dihuraikan. Kami menggunakan querySelectorAll untuk memilih tajuk ini, mengeluarkan kandungan teks mereka, kedalaman (H1 atau H2), dan atribut ID.

 fungsi generatelinkmarkup ($ contentElement) {
  headings const = [... $ contentElement.QuerySelectorAll ('H1, H2')];
  const parsedHeadings = headings.map (heading => ({
    Tajuk: Heading.Innertext,
    Kedalaman: heading.nodename.replace (/\ d/g, ''),
    ID: Heading.GetAttribute ('ID')
  }));
  // ... (selebihnya fungsi untuk menghasilkan markup HTML)
}
Salin selepas log masuk

Ini menghasilkan pelbagai objek, masing -masing mewakili tajuk. Data ini kemudiannya digunakan untuk membuat HTML untuk jadual kandungan menggunakan literasi templat ES6, menambah lekukan untuk subheadings (H2). HTML yang dihasilkan ditambah kepada elemen selain.

Melaksanakan pemerhati persimpangan

Untuk menonjolkan bahagian aktif secara dinamik dalam jadual kandungan, kami menggunakan API Observer Persimpangan. API ini membolehkan kita memantau apabila elemen (dalam kes ini, tajuk) bersilang dengan viewport.

 fungsi CreateObserver ($ links) {
  const options = {rootMargin: "0px 0px -200px 0px", ambang: 1};
  const callback = (penyertaan, pemerhati) => handsObserver (penyertaan, pemerhati, $ pautan); // panggilan balik mengendalikan kemas kini
  mengembalikan IntersectionObserver baru (panggilan balik, pilihan);
}

Function HandsObserver (penyertaan, pemerhati, $ pautan) {
  entri.Foreach (entry => {
    jika (entry.isIntersecting && entry.IntersectionRatio> = 1) {
      UpdateLinks (`#$ {entry.target.getAttribute ('id')}`, $ links);
    }
  });
}

fungsi updateLinks (LookId, $ links) {
  $ links.foreach (link => {
    link.classlist.remove ('is-active');
    jika (link.getAttribute ('href') === visibleId) link.classlist.add ('is-active');
  });
}
Salin selepas log masuk

Pemeriksaan fungsi handleObserver untuk persimpangan dan panggilan updateLinks untuk menambah/mengeluarkan kelas is-active dari pautan yang sepadan dalam jadual kandungan.

Menatal lancar dan pengendalian klik pautan

Mengklik pautan dalam jadual kandungan hendaklah tatal dengan lancar ke bahagian yang sepadan. Kami menambah pendengar acara ke setiap pautan, menghalang tingkah laku lalai dan menggunakan window.scroll dengan pilihan tingkah laku smooth (melainkan pengguna lebih suka gerakan dikurangkan).

 const MotionQuery = window.matchmedia ('(lebih suka-dikurangkan-gerakan)');

$ links.foreach (link => {
  link.addeventListener ("klik", evt => handlelinkclick (evt, $ tajuk, gerakan));
});

Fungsi HandlelinkClick (EVT, $ Headings, MotionQuery) {
  evt.PreventDefault ();
  const id = evt.target.getAttribute ("href"). ganti ('#', '');
  const seksyen = $ headings.find (heading => heading.getAttribute ('id') === id);
  seksyen.focus ();
  window.scroll ({
    Kelakuan: MotionQuery.Matches? 'segera': 'lancar',
    Atas: Section.offsettop - 20
  });
}
Salin selepas log masuk

Menghidupkan jadual kandungan dengan vue.js

Akhirnya, Vue.js<transition-group></transition-group> Komponen digunakan untuk menghidupkan penambahan dan penyingkiran item senarai dalam jadual kandungan. Ini memberikan peralihan yang lancar apabila bahagian menjadi aktif atau tidak aktif. Peralihan CSS yang sesuai ditakrifkan untuk mengendalikan animasi. .

Pendekatan lengkap ini menyampaikan kandungan yang sangat interaktif dan mesra pengguna untuk kandungan markdown jangka panjang.

Atas ialah kandungan terperinci Parsing markdown ke dalam jadual kandungan automatik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1267
29
Tutorial C#
1239
24
Fon Font Google Fon Fon Font Google Fon Apr 09, 2025 am 10:42 AM

Saya melihat Font Google melancarkan reka bentuk baru (tweet). Berbanding dengan reka bentuk besar yang terakhir, ini terasa lebih berulang. Saya hampir tidak dapat memberitahu perbezaannya

Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Cara membuat pemasa undur animasi dengan HTML, CSS dan JavaScript Apr 11, 2025 am 11:29 AM

Pernahkah anda memerlukan pemasa undur dalam projek? Untuk sesuatu seperti itu, mungkin semula jadi untuk mencapai plugin, tetapi sebenarnya lebih banyak lagi

Panduan Atribut Data HTML Panduan Atribut Data HTML Apr 11, 2025 am 11:50 AM

Semua yang anda ingin tahu mengenai atribut data dalam HTML, CSS, dan JavaScript.

Bukti konsep untuk menjadikan sass lebih cepat Bukti konsep untuk menjadikan sass lebih cepat Apr 16, 2025 am 10:38 AM

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

Bagaimana Kami Membuat Tapak Statik yang Menjana Corak Tartan Di SVG Bagaimana Kami Membuat Tapak Statik yang Menjana Corak Tartan Di SVG Apr 09, 2025 am 11:29 AM

Tartan adalah kain berpola yang biasanya dikaitkan dengan Scotland, terutamanya kilt bergaya mereka. Di Tartanify.com, kami mengumpulkan lebih dari 5,000 Tartan

Cara Membina Komponen Vue dalam Tema WordPress Cara Membina Komponen Vue dalam Tema WordPress Apr 11, 2025 am 11:03 AM

Arahan template inline membolehkan kita membina komponen Vue yang kaya sebagai peningkatan progresif ke atas markup WordPress yang sedia ada.

Walaupun anda tidak kelihatan, kecerunan CSS menjadi lebih baik Walaupun anda tidak kelihatan, kecerunan CSS menjadi lebih baik Apr 11, 2025 am 09:16 AM

Satu perkara yang menarik perhatian saya pada senarai ciri-ciri untuk Lea Verou &#039; s conic-gradient () polyfill adalah item terakhir:

Perbandingan pembekal bentuk statik Perbandingan pembekal bentuk statik Apr 16, 2025 am 11:20 AM

Mari kita cuba menyusun istilah di sini: "Penyedia Borang Statik." Anda membawa html anda

See all articles