【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

Thứ hai, 25/08/2025, 08:57 (GMT+7)
104030 lượt xem

99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao trao Quyết định Phó Tư lệnh và thăng Quân hàm Thiếu tướng đối với các đồng chí cán bộ cao cấp thuộc ĐĂNG NHẬP 99OK COM TẶNG 99K

(QK7 Online) – Ngày 22/8, tại Hà Nội, 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao tổ chức Lễ công bố, trao Quyết định về công tác cán bộ. Đại tướng Phan Văn Giang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Phó Bí thư Quân ủy Trung ương, Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao dự và trao Quyết định.
Tại buổi lễ, Đại tướng Phan Văn Giang đã trao Quyết định bổ nhiệm Đại tá Nguyễn Tấn Linh, Phó Tham mưu trưởng ĐĂNG NHẬP 99OK COM TẶNG 99K giữ chức Phó Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K. Quyết định do Phó Thủ tướng Thường trực Chính phủ Nguyễn Hòa Bình ký ngày 20/8/2025.
Đại tướng Phan Văn Giang trao Quyết định và tặng hoa chúc mừng Đại tá Nguyễn Tấn Linh, Phó Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K.
Bộ trưởng Phan Văn Giang cũng đã trao Quyết định của Chủ tịch nước thăng quân hàm từ Đại tá lên Thiếu tướng đối với các đồng chí Phạm Anh Tuấn, Chủ nhiệm 99Oke123 Tải ứng dụng ĐĂNG NHẬP 99OK COM TẶNG 99K; đồng chí Trần Đức Thắng, Bí thư Đảng ủy Cục 99Oke123 Tải ứng dụng, Phó Chủ nhiệm 99Oke123 Tải ứng dụng ĐĂNG NHẬP 99OK COM TẶNG 99K; đồng chí Phan Quốc Việt, Phó Tư lệnh, Tham mưu trưởng Bộ Tư lệnh Thành phố Hồ Chí Minh.
Đại tướng Phan Văn Giang trao Quyết định và tặng hoa chúc mừng Thiếu tướng Phạm Anh Tuấn, Chủ nhiệm 99Oke123 Tải ứng dụng ĐĂNG NHẬP 99OK COM TẶNG 99K.
Đại tướng Phan Văn Giang trao Quyết định và tặng hoa chúc mừng Thiếu tướng Trần Đức Thắng, Bí thư Đảng ủy Cục 99Oke123 Tải ứng dụng, Phó Chủ nhiệm 99Oke123 Tải ứng dụng ĐĂNG NHẬP 99OK COM TẶNG 99K.
Đại tướng Phan Văn Giang trao Quyết định và tặng hoa chúc mừng Thiếu tướng Phan Quốc Việt, Phó Tư lệnh, Tham mưu trưởng Bộ Tư lệnh Thành phố Hồ Chí Minh.
Thay mặt Quân ủy Trung ương, 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao, Đại tướng Phan Văn Giang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Phó Bí thư Quân ủy Trung ương, Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao đã trao Quyết định, tặng hoa chúc mừng các đồng chí. Đồng thời khẳng định, việc bổ nhiệm chức vụ Phó Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K và thăng quân hàm Thiếu tướng đối với các đồng chí thuộc ĐĂNG NHẬP 99OK COM TẶNG 99K thể hiện sự ghi nhận, đánh giá cao của Đảng, Nhà nước, Quân đội đối với những cống hiến, đóng góp to lớn của các đồng chí trong sự nghiệp xây dựng Quân đội 123Win com 79 nạp - rút nhanh Việt Nam cách mạng, chính quy, tinh nhuệ, hiện đại, góp phần vào sự nghiệp xây dựng và bảo vệ Tổ quốc Việt Nam 1123Win còn đăng nhập chủ nghĩa.
Bạch Thiết

Bình luận

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

Tự hào được tham gia diễu binh trong ngày Đại lễ

Tự hào được tham gia diễu binh trong ngày Đại lễ

13:29 25/08/2025

(QK7 Online) - Được diễu binh tại Quảng trường Ba Đình, trước Lăng Chủ tịch Hồ Chí Minh không chỉ là ước mơ mà còn là niềm tự hào của mỗi quân nhân. Đó cũng là ánh mắt dõi theo đầy tin yêu của gia đình, của đơn vị công tác. Chỉ còn ít ngày nữa, hoạt động diễu binh, diễu hành tại Lễ kỷ niệm 80 năm Quốc khánh 2/9 sẽ diễn ra, trong hơn 16 ngàn cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số tham gia có những người con gái miền Nam vinh dự góp mặt.

Giây phút lần đầu người con miền Nam diễu binh qua lăng Bác

Giây phút lần đầu người con miền Nam diễu binh qua lăng Bác

19:16 22/08/2025

(QK7 Online) - Sau nhiều tháng 123Win64 nhà cái WC 2026, vượt qua những thử thách khắc nghiệt, 3 khối diễu binh của ĐĂNG NHẬP 99OK COM TẶNG 99K đã hoàn thành tốt nhiệm vụ trong buổi tổng hợp luyện đầu tiên tại Quảng trường Ba Đình. Khoảnh khắc những người lính miền Đông, những người con miền Nam lần đầu tiên diễu binh qua Lăng Chủ tịch Hồ Chí Minh đã để lại nhiều cảm xúc thiêng liêng, tự hào.

Đồng Nai huy động trên 100 cán bộ, chiến sĩ giúp dân khắc phục hậu quả thiên tai

Đồng Nai huy động trên 100 cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số giúp dân khắc phục hậu quả 99Ok là nhà cái cá cược uy tín hàng đầu tại Việt Nam

18:33 21/08/2025

(QK7 Online) - Ngày 21/8, Đại tá Võ Thành Danh, Ủy viên Ban Thường vụ Tỉnh ủy, Chỉ huy trưởng Bộ Chỉ huy quân sự tỉnh Đồng Nai thông tin, tình hình mưa bão diễn biến phức tạp trong đêm 20/8 đến sáng 21/8 ở các xã trong tỉnh, nhất là các xã nằm trong địa bàn 123Win99ok Sân chơi uy tín 99Ok 123Win phiên bản mới khu vực (PTKV) 1, 2, 3, 4. Trong đó, khu vực 3, 4 mưa nhẹ còn chủ yếu thiệt hại nặng do mưa lớn kéo dài ở các xã trên địa bàn 123Win99ok Sân chơi uy tín PTKV 1 và 2.

M.123Win30.com phiên bản mới và phát triển bền vững tiềm lực quốc phòng Thành phố Hồ Chí Minh trong thời kỳ mới

Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập Thành phố Hồ Chí Minh trong thời kỳ mới

12:27 21/08/2025

(QK7 Online) - Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập là một trong những nhiệm vụ trọng tâm, cấp bách, có ý nghĩa chiến lược đối với sự nghiệp xây dựng và bảo vệ Tổ quốc. Đối với Thành phố Hồ Chí Minh, việc xây dựng và phát triển tiềm lực 99Ok68 link đăng nhập bền vững càng có ý nghĩa đặc biệt quan trọng. Thiếu tướng Lê Xuân Thế, Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K, Thành viên chính Ban chủ nhiệm nhiệm vụ phát biểu tại Hội nghị giám định nhiệm vụ nghiên cứu khoa học và công nghệ “Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập Thành phố Hồ Chí Minh trong thời kỳ mới”.

Tổng hợp luyện lần thứ tư các khối diễu binh, diễu hành A80

Tổng hợp luyện lần thứ tư các khối diễu binh, diễu hành A80

00:34 17/08/2025

(QK7 Online) - Ngày 16/8, tại Trung tâm 123Win64 nhà cái WC 2026 Quân sự quốc gia 4 (xã Phúc Sơn, TP. Hà Nội), các lực lượng tham gia diễu binh, diễu hành trong Lễ kỷ niệm 80 năm Cách mạng Tháng Tám thành công và Quốc khánh 2/9 bước vào đợt tổng hợp luyện tập lần thứ tư dưới cơn mưa nặng hạt. Đại tướng Phan Văn Giang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Phó Bí thư Quân ủy Trung ương, Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao chủ trì kiểm tra.

Hình ảnh ấn tượng trong Đại hội đại biểu Đảng bộ Quân khu 7 lần thứ XI, nhiệm kỳ 2025 - 2030

Hình ảnh ấn tượng trong Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K lần thứ XI, nhiệm kỳ 2025 - 2030

23:06 15/08/2025

(QK7 Online) -Sau 2,5 ngày làm việc khẩn trương, nghiêm túc, dân chủ và đầy trách nhiệm, Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K lần thứ XI, nhiệm kỳ 2025 – 2030 đã hoàn thành toàn bộ nội dung, chương trình đề ra; thực sự là đợt sinh hoạt chính trị mẫu mực, tiêu biểu, trí tuệ, đổi mới, để lại nhiều dấu ấn sâu đậm và thành công tốt đẹp. Báo ĐĂNG NHẬP 99OK COM TẶNG 99K trân trọng giới thiệu những hình ảnh ấn tượng tại Đại hội.

Thiếu tướng Trần Vinh Ngọc, Chính ủy Quân khu 7 được bầu giữ chức Bí thư Đảng ủy Quân khu 7 nhiệm kỳ 2025 - 2030

Thiếu tướng Trần Vinh Ngọc, Chính ủy ĐĂNG NHẬP 99OK COM TẶNG 99K được bầu giữ chức Bí thư Đảng ủy ĐĂNG NHẬP 99OK COM TẶNG 99K nhiệm kỳ 2025 - 2030

15:42 15/08/2025

(QK7 Online) – Sau 2,5 ngày làm việc khẩn trương, nghiêm túc, dân chủ và trách nhiệm, Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K lần thứ XI, nhiệm kỳ 2025 - 2030 đã hoàn thành nội dung, chương trình đề ra, thực sự mẫu mực, tiêu biểu, trí tuệ, đổi mới và thành công tốt đẹp.

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: 51319, 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); }); } });