【99OK】 Link vào 99OK Casino mới nhất 2025 ✔️

Link 99OK hot nhất

99OK - Nhà Cái Thể Thao, Nổ Hũ, Bắn Cá Uy Tín

Văn hóa - 1123Win còn đăng nhập - Thể thao > Văn hóa - Nghệ thuật

Thứ bảy, 28/03/2026, 22:24 (GMT+7)
7080 lượt xem

Tùy bút: MAI

Tôi vẫn nhớ như in tiếng sên xe đạp lạch cạch trên con đường đất đỏ năm nào. Con đường ấy không chỉ dẫn tôi đến trường, mà còn đưa tôi đi qua thời tuổi thơ trong veo của tình bạn. Nơi có Mai, có những tháng ngày nghèo khó nhưng ấm áp đến lạ. Với tôi, Mai không chỉ là một người bạn, mà là một phần ký ức không thể tách rời. Cho tôi học được yêu thương, hy sinh và cách nương tựa vào nhau để cùng đi qua những chông chênh của cuộc đời.
Ngày ấy, Long Khánh là những con đường gồ ghề đầy nắng gió. Mùa khô, bụi đỏ bám đầy tóc; mùa mưa, bùn đất níu chặt hai bánh xe, cứng ngắt cả cái dè nếu không lấy những cành cao su đẩy chúng ra thì không thể chạy được. Trên chiếc xe đạp cũ kỹ ấy, Mai - cô bạn nhỏ nhắn vẫn bền bỉ chở tôi đến trường mỗi ngày. Có khi sáng sớm còn ngái ngủ, đã nghe tiếng kêu inh ỏi như cái “loa làng” của nó. Có khi chiều muộn nắng tắt cũng cái “loa phát thanh” nhưng tầng số cao hơn nó hí hửng: “Hân ơi! Ra tao chở đi ăn chè. Đủ tiền rồi nè!
Con đường quen thuộc kia vẫn in dấu hai đứa, thuở nào. Những buổi tan học về, tôi cùng Mai hay rủ thằng Phú “đua xe”. Thật lòng mà nói thì chả bao giờ thằng Phú nó dám thắng tôi với Mai cả. Nên hai chúng tôi rất khoái chí với chiến công của mình. Có hôm tức quá vì thằng Phú lỡ chạy qua mặt chút xíu mà hai đứa cắm đầu đạp thật nhanh để vượt mặt nó mà không để ý cái ổ gà phía trước khiến cả hai ngã nhào xuống đường, chân tay trầy xước, máu rịn qua lớp bụi. Nhưng cảm giác đau dường như tan biến, nhường chỗ cho tiếng cười trong veo lan vào gió của nhóm bạn. Tôi không bao giờ quên mỗi lần chạy ngang qua chợ. Mẹ Mai hay ngoắc tôi vào đưa cho cái bánh ít, có khi vài trái ổi trong vườn nhà do mẹ chắt chiu để dành đem ra bán. Mẹ thương tôi như con ruột, có cái gì cho Mai là tôi chắc chắn cũng có một phần như vậy. Những tháng ngày ấy trôi qua êm đềm, nhẹ như gió, nhưng âm thầm bám rễ sâu vào ký ức, nuôi lớn một tình bạn chân thành, bền bỉ.
Năm cuối cấp khép lại, cũng là lúc mà mỗi người trong chúng tôi mang nhiều trăn trở nhất. Bao nhiêu niềm vui, nỗi buồn đan xen lẫn lộn. Hoàn cảnh gia đình mỗi đứa khác nhau. Lựa chọn và kỳ vọng cho một bước đường tương lai sắp tới cũng chẳng giống nhau. Những đêm mưa dội lộp độp xuống mái tôn cũ kĩ, chúng tôi nằm cạnh nhau trong im lặng, gió rít qua tán lá. Nỗi sợ len vào từng nhịp thở. Nước mắt chảy dài, thấm ướt vai áo, như chính dòng đời phía trước - nặng nề và mịt mù chưa tìm thấy lối ra.
Dừng lại việc học, Mai gom góp từng đồng dành dụm, vay mượn cả tiền của mẹ để đưa cho tôi làm lộ phí lên thành phố như gửi cả ước mơ của mình vào hành trang của tôi… Mỗi trái bưởi, vài quả bơ hay những nãi chuối xanh ươm đã vội cắt sớm để dành cho tôi mỗi khi về thăm như món đồ xa xỉ với chính nó. Những lần nhét tiền vào tay tôi là cả những ngày tháng ngồi đạp máy may đến mỏi cả chân, tê cả gối; chắt chiu, tiết kiệm không dám ăn, dám sài. Nó luôn nhường cho tôi những điều tốt đẹp nhất. Mỗi lần tôi từ chối, nó lên giọng ra vẻ chị hai với tôi: “Mày trên Sài Gòn cái gì cũng tiền tiền;Tao ở đây bó rau cũng qua bữa rồi. Yên tâm”
Đôi lúc tôi tự hỏi - Cả anh chị ruột của tôi, những người thân trong gia đình tôi cũng chưa từng quan tâm hay làm cho tôi được như vậy. Nhỏ bạn không có một xu dính túi như tôi lấy đâu ra uy tín, lấy đâu ra tiền để trả lại cho nó, cho mẹ??? Lòng tôi nặng trĩu… Những ngày đầu ở đất Sài Thành, tôi chật vật giữa bộn bề mưu sinh. Có lúc tưởng chừng không thể đi tiếp. Chính những lời động viên giản dị của Mai đã nâng bước chân tôi. Lời hứa từ sâu thẳm lòng mình theo tôi suốt những năm tháng sau này như một ngọn lửa âm ỉ không bao giờ tắt.
Thời gian lặng lẽ trôi, hình ảnh người bạn nhỏ nhắn, lam lũ nhưng với cái chân tình to lớn, thấm đậm dành cho tôi đã giúp tôi vượt qua bao thử thách, phong ba giúp tôi đứng vững. Mai không chỉ cho tôi một “mùa xuân” thực sự của tình bạn, tình thân như chính cái tên gọi của nó, giúp tôi có một vị trí xã hội nhất định như ngày hôm nay mà còn là “ngày mai” của một tương lai tươi sáng và ân tình sâu sắc trong suốt cuộc đời tôi. Tôi nhớ mãi cái ngày sinh nhật năm ấy. Đêm thành phố sáng đèn, còn lòng tôi thì lặng đi khi thấy Mai đứng trước cửa, gương mặt còn vương mệt mỏi sau chuyến xe dài. Mẹ đang bệnh, vậy mà nó vẫn đưa thằng Phúc - đứa con trai nhỏ luôn quấn mẹ bắt chuyến xe đò muộn lên chỉ để có mặt, để chúc tôi một câu rồi vội vã quay về trong đêm để kịp buổi học sáng hôm sau của con. Không quà cáp, không hoa bánh nhưng chỉ cần một cái nắm tay, một ánh mắt cười của nó, mà khiến tôi thương đến nghẹn lòng. Tôi tiễn hai mẹ con về quê khi đêm đã sang canh. Giữa phố thị thưa vắng bóng người, lòng tôi bỗng dâng trào cảm xúc. Tôi nhận ra một điều: Hạnh phúc chỉ giản đơn từ những hy sinh thầm lặng và cử chỉ quan tâm bình thường, lại có thể khiến tim con người rung lên, khiến cuộc đời bỗng lung linh hơn giữa những bão giông, và nhắc nhở tôi luôn giữ trọn tình bạn thuỷ chung đươc kết tinh qua năm tháng.
Mai! Bạn mãi là “mùa xuân” của tôi, là phần ký ức thiêng liêng nhất mà tôi luôn gìn giữ vẹn tròn. Tôi vẫn thường kể cho anh nghe những câu chuyện về Mai như một cuốn phim quay chậm. Anh yêu thương tôi và rất trân trọng Mai, nên thường hay dùng từ “tình bạn có 1 không 2” mỗi khi nói về chúng tôi. Bản thân tôi cũng vô cùng trân quý. Tôi tự nhủ lòng mình dù tháng năm có trôi qua, dù tuổi xuân có kéo đến, hay sóng gió có cướp đi sự sống của con người theo quy luật tự nhiên của nó. Nhưng yêu thương mà tôi dành cho bạn, ân tình mà không gì có thể đong đếm được vẫn mãi vẹn nguyên như lúc ban đầu. Cái thuở ấu thơ không vết ố bụi trần và minh chứng rõ nhất là các con của chúng ta. Chúng luôn yêu thương và gìn giữ những giá trị tinh thần mà cuộc đời này không dễ gì có được. dù ở bất cứ nơi đâu hay trong hoàn cảnh nào. Bạn vẫn mãi mãi là tri kỷ, là người bạn tốt nhất, chân thành nhất và cao đẹp nhất mà tôi may mắn có được trong cuộc đời này.
"Lam lũ bạn dành riêng mình bạn,
Để trọn yêu thương đó cho tôi
Vượt bao sóng gió tôi cần bạn
Thầm lặng bên tôi đóa Mai vàng".
SG:27/3/26. Thương tặng bạn yêu quý của tôi!
Nguyễn Đức Hải

Bình luận

Bài viết tương tự:

"Tiếp lửa" Trường Sa

"Tiếp lửa" Trường Sa

13:37 09/05/2026

(QK7 Online) - Giữa trùng khơi mênh mông, nơi đầu sóng ngọn gió của Tổ quốc, những giai điệu mang hơi thở quân dân miền Đông Nam Bộ lại ngân vang như nhịp sóng, tiếp thêm niềm tin và ý chí cho cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số, 123Win79 phần thưởng lớn trên quần đảo Trường Sa. Đó là hành trình đặc biệt của Đoàn Văn công Quân khu hướng về biển đảo thiêng liêng.

Trung đoàn Gia Định sôi nổi hưởng ứng Ngày sách và Văn hóa đọc Việt Nam năm 2026

Trung đoàn Gia Định sôi nổi hưởng ứng Ngày sách và Văn hóa đọc Việt Nam năm 2026

21:08 04/05/2026

(QK7 Online) - Chiều 4/5, Trung đoàn Gia Định, Bộ Tư lệnh Thành phố Hồ Chí Minh tổ chức chương trình Ngày sách và văn hóa đọc Việt Nam với chủ đề: “Đọc sách – Làm giàu tri thức, nuôi dưỡng khát vọng, thúc đẩy đổi mới, sáng tạo” với sự tham gia của hơn 200 cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số Trung đoàn và khách mời.

Hội thi vũ điệu trong sinh hoạt tập thể quân nhân tại Trung đoàn 4, Sư đoàn 5

Hội thi vũ điệu trong sinh hoạt tập thể quân nhân tại Trung đoàn 4, Sư đoàn 5

15:28 01/05/2026

(QK7 Online) - Hòa chung không khí thi đua sôi nổi chào mừng các ngày lễ lớn của đất nước, ngày 1/5, Trung đoàn 4, Sư đoàn 5 tổ chức Hội thi vũ điệu trong sinh hoạt tập thể quân nhân, thu hút đông đảo cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số tham gia. Hội thi không chỉ tạo sân chơi lành mạnh mà còn góp phần nâng cao đời sống văn hóa tinh thần, tăng cường sự đoàn kết, gắn bó trong đơn vị.

Trung đoàn 271 tổ chức chương trình Ngày Sách và Văn hóa đọc Việt Nam lần thứ 5

Trung đoàn 271 tổ chức chương trình Ngày Sách và Văn hóa đọc Việt Nam lần thứ 5

15:26 23/04/2026

(QK7 online) - Ngày 23/4, Trung đoàn 271, Sư đoàn 5 phối hợp Thư viện Thành phố Hồ Chí Minh, Trường Trung học phổ thông Phước Vĩnh, Thư viện xã Phú Giáo và đơn vị kết nghĩa tổ chức các hoạt động hưởng ứng Ngày Sách và Văn hóa đọc Việt Nam lần thứ 5 năm 2026 với chủ đề “Sách và tri thức - động lực phát triển trong kỷ nguyên vươn mình của dân tộc”. Thượng tá Nguyễn Văn Tuấn, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Sư đoàn 5 dự và chỉ đạo chương trình.

TIN XEM NHIỀU:

TIN MỚI:

DƯ LUẬN QUAN TÂM:

99OK - Nhà Cái Thể Thao, Nổ Hũ, Bắn Cá Uy Tín

Theo dõi chúng tôi tại:

Cơ quan chủ quản: ĐĂNG NHẬP 99OK COM TẶNG 99K

Giấy phép số 45-YU ngày 28/07/2021

© Báo ĐĂNG NHẬP 99OK COM TẶNG 99K điện tử giữ bản quyền nội dung trên website này.

Tòa soạn: 81A Hai Bà Trưng, Quận 1, TP. Hồ Chí Minh

Phụ trách Tổng Biên tập: Thượng tá Lại Thế Hiền

Email: [email protected] | [email protected] | 1

'); printWindow.document.write(''); printWindow.document.write(''); printWindow.document.write('

【99OK】 Link vào 99OK Casino mới nhất 2025 ✔️

Link 99OK hot nhất

'); // Add logo at the top printWindow.document.write(''); printWindow.document.write('

' + title + '

'); if (dateTime) { printWindow.document.write('
' + dateTime + '
'); } printWindow.document.write('
'); printWindow.document.write(content.html()); printWindow.document.write('
'); printWindow.document.write(''); printWindow.document.write(''); printWindow.document.close(); $('#printLoadingMsg').remove(); // Wait for content and images to load then print printWindow.onload = function() { // Additional check to ensure logo is loaded const logoImg = printWindow.document.querySelector('.print-logo img'); if (logoImg) { logoImg.onload = function() { setTimeout(function() { printWindow.print(); printWindow.close(); }, 300); }; // If logo already loaded (cached) if (logoImg.complete) { setTimeout(function() { printWindow.print(); printWindow.close(); }, 300); } } else { setTimeout(function() { printWindow.print(); printWindow.close(); }, 500); } }; } if (totalImages > 0) { lazyImages.forEach(function(img) { const actualSrc = img.dataset.src || img.getAttribute('data-src'); if (actualSrc && actualSrc !== img.src) { const tempImg = new Image(); tempImg.onload = tempImg.onerror = function() { img.src = actualSrc; img.classList.remove('lazy'); loadedCount++; if (loadedCount === totalImages) { proceedWithPrint(); } }; tempImg.src = actualSrc; } else { loadedCount++; if (loadedCount === totalImages) { proceedWithPrint(); } } }); } else { proceedWithPrint(); } } document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.image-caption').forEach(el => { if (el.textContent.trim() === 'Nhập chú thích cho ảnh...') { el.style.display = 'none'; } }); }); $(document).ready(function () { // Stop any ongoing speech when page loads and reset TTS state if (window.speechSynthesis) { window.speechSynthesis.cancel(); } // Dictionary để chuyển đổi từ viết tắt const abbreviationDict = { 'LLVT': 'lực lượng vũ trang', 'CHQS': 'chỉ huy quân sự', 'HĐND': 'hội đồng 123Win com 79 nạp - rút nhanh', 'CHXHCN': 'Cộng hòa xã hội chủ nghĩa', 'VKTBKT': 'vũ khí trang bị kỹ thuật', 'UBND': 'ủy ban 123Win com 79 nạp - rút nhanh', 'MTTQ': 'mặt trận tổ quốc', 'ĐCSVN': 'Đảng Cộng sản Việt Nam', 'TNXP': 'thanh niên xung phong', 'BĐBP': 'bộ đội biên phòng', 'CAND': 'công an 123Win com 79 nạp - rút nhanh', 'QĐND': 'quân đội 123Win com 79 nạp - rút nhanh', 'TPHCM': 'Thành phố Hồ Chí Minh', 'TP.HCM': 'Thành phố Hồ Chí Minh', 'HN': 'Hà Nội', 'DN': 'Đà Nẵng', 'ĐBQH': 'đại biểu quốc hội', 'QH': 'quốc hội', 'CP': 'chính phủ', 'TW': 'trung ương', 'BCH': 'ban chấp hành', 'BTV': 'ban thường vụ', 'UV': 'ủy viên', 'PBT': 'phó bí thư', 'BT': 'bí thư', 'CT': 'chủ tịch', 'PCT': 'phó chủ tịch', 'TTg': 'thủ tướng', 'PTTg': 'phó thủ tướng', 'CNQ': 'cộng hòa 123Win com 79 nạp - rút nhanh', 'CHDC': 'cộng hòa dân chủ' }; // Hàm xử lý từ viết tắt function processAbbreviations(text) { let processedText = text; // Duyệt qua tất cả các từ viết tắt trong dictionary for (const [abbr, fullForm] of Object.entries(abbreviationDict)) { // Tạo regex để tìm từ viết tắt (case insensitive) // \b đảm bảo match whole word, không match partial const regex = new RegExp(`\\b${abbr}\\b`, 'gi'); processedText = processedText.replace(regex, fullForm); } return processedText; } // Reset TTS control buttons to initial state $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); $('#speedControls').removeClass('flex').addClass('hidden'); // Initialize Fancybox for article images $('.article-content img').each(function() { const $img = $(this); // const src = $img.attr('src').replace("/thumb/","/"); const src = $img.attr('src'); const alt = $img.attr('alt') || ''; // Wrap image with fancybox link $img.wrap(``); $img.addClass('cursor-pointer transition-transform hover:scale-105'); }); // Configure Fancybox $('[data-fancybox="gallery"]').fancybox({ buttons: [ "zoom", "slideShow", "thumbs", "close" ], loop: true, protect: true }); // Handle comment submission $("#comment-btn").click(function () { const userName = $('#UserName').val().trim(); const contentComment = $('#ContentComment').val().trim(); const userEmail = $('#UserEmail').val().trim(); // Hide any existing notifications $('#successNotification, #errorNotification').addClass('hidden'); if (userName === "" || contentComment === "") { $('#errorNotification').removeClass('hidden'); return; } // Validate email format if provided if (userEmail !== "" && !isValidEmail(userEmail)) { $('#errorNotification span').text('Email không hợp lệ!'); $('#errorNotification').removeClass('hidden'); return; } $.ajax({ url: "/ExtAppCommon/Home/Comment", type: "POST", dataType: "json", data: { id: 57924, name: userName, content: contentComment, email: userEmail }, success: function (result) { if (result > 0) { // Clear form $('#UserName').val(""); $('#ContentComment').val(""); $('#UserEmail').val(""); // Show success message $('#successNotification').removeClass('hidden'); // Hide success message after 3 seconds setTimeout(function() { $('#successNotification').addClass('hidden'); }, 3000); // Add new comment to the list const newComment = `
Avatar
${userName}
Vừa xong

${contentComment}

`; $('#commentsList').prepend(newComment); } else { $('#errorNotification span').text('Có lỗi xảy ra, vui lòng thử lại sau!'); $('#errorNotification').removeClass('hidden'); } }, error: function() { $('#errorNotification span').text('Có lỗi xảy ra, vui lòng thử lại sau!'); $('#errorNotification').removeClass('hidden'); } }); }); // Handle Enter key in textarea $('#ContentComment').keypress(function(e) { if (e.which === 13 && !e.shiftKey) { e.preventDefault(); $("#comment-btn").click(); } }); // Email validation function function isValidEmail(email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); } // Text-to-speech functionality const synth = window.speechSynthesis; let currentUtterance = null; let currentSpeed = 1; // Speed control functions function updateSpeedDisplay() { $('#speedDisplay').text(currentSpeed + 'x'); } $('#increaseSpeed').click(function() { if (currentSpeed < 2) { currentSpeed += 0.25; updateSpeedDisplay(); if (currentUtterance) { // Restart speech with new speed const text = currentUtterance.text; synth.cancel(); speak(text, currentSpeed); } } }); $('#decreaseSpeed').click(function() { if (currentSpeed > 0.5) { currentSpeed -= 0.25; updateSpeedDisplay(); if (currentUtterance) { // Restart speech with new speed const text = currentUtterance.text; synth.cancel(); speak(text, currentSpeed); } } }); // Function to get clean text content without button text function getCleanContent() { // Clone the content div to avoid modifying the original const contentClone = $('.article-content').clone(); // Remove all buttons and their container contentClone.find('button').parent('div').remove(); // Remove image captions (text in tags that are typically captions) contentClone.find('em').remove(); // Get clean text let cleanText = contentClone.text().trim(); // Remove "(QK7 Online)" and variations cleanText = cleanText.replace(/\(QK7\s*Online\)\s*[-–]?\s*/gi, ''); // Remove other common patterns that shouldn't be read cleanText = cleanText.replace(/\s+/g, ' '); // Replace multiple spaces with single space // Xử lý từ viết tắt cleanText = processAbbreviations(cleanText); return cleanText; } function getVietnameseVoice() { let voices = synth.getVoices(); // Filter for Vietnamese voices let vietnameseVoices = voices.filter(voice => voice.lang.includes('vi') || voice.name.toLowerCase().includes('vietnamese') || voice.name.toLowerCase().includes('việt') ); // If Vietnamese voices found, prefer Microsoft/Google voices if (vietnameseVoices.length > 0) { // Try to find Microsoft Vietnamese voice first let msVoice = vietnameseVoices.find(v => v.name.toLowerCase().includes('microsoft') && v.name.toLowerCase().includes('vietnamese') ); if (msVoice) return msVoice; // Then try Google Vietnamese voice let googleVoice = vietnameseVoices.find(v => v.name.toLowerCase().includes('google') && v.name.toLowerCase().includes('vietnamese') ); if (googleVoice) return googleVoice; // If no Microsoft/Google voice, use the first Vietnamese voice return vietnameseVoices[0]; } // If no Vietnamese voice found, return null return null; } function speak(text, rate = 1) { // Stop any ongoing speech if (synth.speaking) { synth.cancel(); } const utterance = new SpeechSynthesisUtterance(text); utterance.lang = 'vi-VN'; utterance.rate = rate; // Wait for voices to be loaded and try to set Vietnamese voice const setVoiceAndSpeak = () => { const vietnameseVoice = getVietnameseVoice(); if (vietnameseVoice) { utterance.voice = vietnameseVoice; currentUtterance = utterance; // Show/hide control buttons $('#pauseBtn, #stopBtn').removeClass('hidden'); $('#resumeBtn').addClass('hidden'); // Show speed controls $('#speedControls').removeClass('hidden').addClass('flex'); utterance.onend = function() { currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); // Hide speed controls $('#speedControls').removeClass('flex').addClass('hidden'); }; synth.speak(utterance); } else { // If no Vietnamese voice available, show an error message alert('Không tìm thấy giọng đọc tiếng Việt trên thiết bị của bạn. Vui lòng cài đặt thêm giọng đọc tiếng Việt trong cài đặt hệ thống.'); } }; if (synth.getVoices().length === 0) { synth.addEventListener('voiceschanged', setVoiceAndSpeak, { once: true }); } else { setVoiceAndSpeak(); } } $('#readArticleBtn').click(function() { const title = $('h1.st37').clone() // Clone to avoid getting button text .children() // Get all child elements .remove() // Remove them .end() // Go back to h1 .text() // Get text content .trim(); // Remove whitespace const content = getCleanContent(); speak(title + ". " + content, currentSpeed); }); $('#pauseBtn').click(function() { if (synth.speaking) { synth.pause(); $(this).addClass('hidden'); $('#resumeBtn').removeClass('hidden'); } }); $('#resumeBtn').click(function() { if (synth.paused) { synth.resume(); $(this).addClass('hidden'); $('#pauseBtn').removeClass('hidden'); } }); $('#stopBtn').click(function() { if (synth.speaking) { synth.cancel(); currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); // Hide speed controls $('#speedControls').removeClass('flex').addClass('hidden'); } }); // Stop speech when user navigates away from page $(window).on('beforeunload', function() { if (window.speechSynthesis && window.speechSynthesis.speaking) { window.speechSynthesis.cancel(); } }); // Stop speech when page visibility changes (user switches tabs) /* $(document).on('visibilitychange', function() { if (document.hidden && window.speechSynthesis && window.speechSynthesis.speaking) { window.speechSynthesis.cancel(); currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); $('#speedControls').removeClass('flex').addClass('hidden'); } });*/ }); document.addEventListener("DOMContentLoaded", function () { var articleContainer = document.querySelector('.article-content.max-w-none.mb-4'); if (!articleContainer) { articleContainer = document.querySelector('[class*="article-content"][class*="max-w-none"][class*="mb-4"]'); } if (!articleContainer) { return; } var fallbackHost = "https://99oke123.com"; var lazyImages = []; // ✅ Hàm update Fancybox href khi ảnh load xong function updateFancyboxHref(img) { const $img = $(img); const $fancyboxLink = $img.parent('a[data-fancybox]'); if ($fancyboxLink.length > 0) { // Cập nhật href với src thực tế const realSrc = img.dataset.src || img.src; if (!realSrc.includes('loading_new.gif') && !realSrc.includes('data:image/svg+xml')) { $fancyboxLink.attr('href', realSrc); } } } function processImagesInContainer() { // Lấy ảnh đã có class lazy var existingLazyImages = [].slice.call(articleContainer.querySelectorAll("img.lazy")); lazyImages = lazyImages.concat(existingLazyImages); // Tự động convert ảnh khác var regularImages = [].slice.call(articleContainer.querySelectorAll("img:not(.lazy):not([data-lazy-processed])")); regularImages.forEach(function(img) { var rect = img.getBoundingClientRect(); var isInViewport = rect.top < (window.innerHeight + 100) && rect.bottom > -100; if (!isInViewport && img.src && (img.src.startsWith('http') || img.src.startsWith('/'))) { // ✅ Lưu src gốc trước khi thay đổi const originalSrc = img.src; // Convert thành lazy img.dataset.src = originalSrc; img.classList.add('lazy'); img.dataset.lazyProcessed = 'true'; // ✅ Cập nhật Fancybox href nếu đã được wrap const $img = $(img); const $fancyboxLink = $img.parent('a[data-fancybox]'); if ($fancyboxLink.length > 0) { $fancyboxLink.attr('href', originalSrc); } // Placeholder img.src = `/BaoQK7/images/loading_new.gif`; lazyImages.push(img); } else { img.dataset.lazyProcessed = 'true'; } }); } processImagesInContainer(); // ✅ IntersectionObserver với callback cập nhật Fancybox if ("IntersectionObserver" in window && lazyImages.length > 0) { let lazyImageObserver = new IntersectionObserver(function (entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { let lazyImage = entry.target; lazyImage.loading = "lazy"; lazyImage.decoding = "async"; lazyImage.onerror = function () { if (!lazyImage.dataset.fallbackTried) { lazyImage.dataset.fallbackTried = "true"; let originalSrc = lazyImage.dataset.src || ""; lazyImage.src = originalSrc.replace("https://99oke123.com", fallbackHost); } else { lazyImage.classList.add("error"); } }; lazyImage.onload = function () { lazyImage.classList.add("loaded"); lazyImage.classList.remove("lazy"); // ✅ Cập nhật Fancybox href sau khi ảnh load xong updateFancyboxHref(lazyImage); }; if (lazyImage.dataset.src) { lazyImage.src = lazyImage.dataset.src; } if (lazyImage.dataset.srcset) { lazyImage.srcset = lazyImage.dataset.srcset; } if (lazyImage.complete && lazyImage.naturalWidth > 0) { lazyImage.onload(); } lazyImageObserver.unobserve(lazyImage); } }); }, { root: null, rootMargin: '50px 0px', threshold: 0.01 }); lazyImages.forEach(function (lazyImage) { lazyImageObserver.observe(lazyImage); }); } });