【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ứ bảy, 09/08/2025, 09:51 (GMT+7)
13687 lượt xem

ĐĂNG NHẬP 99OK COM TẶNG 99K tập huấn sử dụng hệ thống, khai thác tài liệu số phục vụ Đại hội

(QK7 Online) – Ngày 9/8, Quân khu 7 tổ chức tập huấn triển khai, cài đặt, bảo đảm kỹ thuật, bảo mật cơ yếu, quản trị, sử dụng hệ thống khai thác tài liệu phục vụ Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân khu lần thứ XI, nhiệm kỳ 2025 – 2030 theo hình thức không giấy. Thừa ủy quyền của Đảng ủy, Bộ Tư lệnh Quân khu, Đại tá Phạm Anh Tuấn, Ủy viên Ban Thường vụ Đảng ủy, Chủ nhiệm Chính trị Quân khu dự, chỉ đạo hội nghị. Đại tá Nguyễn Hồng Cảnh, Phó trưởng Tiểu ban Thường trực Tiểu ban Kỹ thuật – Công nghệ thông tin, Phó Chủ nhiệm Chính trị Quân khu chủ trì hội nghị.
Quang cảnh buổi tập huấn.
Tại buổi tập huấn, đại diện Ban Cơ yếu Chính phủ; Cục Cơ yếu, Bộ Tổng Tham mưu đã tiến hành hướng dẫn cách thức sử dụng, khai thác, đưa phần mềm vào vận hành phục vụ Đại hội cùng với các giải pháp bảo mật, xác thực; giải pháp quản lý nghiệp vụ. Các chức năng chính của phần mềm gồm tổng hợp, cập nhật tài liệu, quản lý tài liệu có độ mật, quản lý danh mục nhằm đảm bảo việc tổ chức Đại hội một cách hiệu quả, khoa học và có hệ thống.
Đại tá Nguyễn Hồng Cảnh, Phó Chủ nhiệm Chính trị Quân khu dự hội nghị.
Đại diện Ban Cơ yếu Chính phủ trình bày các nội dung tập huấn.
Phát biểu tại buổi tập huấn, Đại tá Phạm Anh Tuấn, Ủy viên Ban Thường vụ Đảng ủy, Chủ nhiệm Chính trị Quân khu nhấn mạnh, Quân khu 7 là đơn vị đầu tiên trong toàn quân tổ chức Đại hội không giấy. Từ thành công của Đại hội không giấy, Quân khu 7 sẽ tổ chức rút kinh nghiệm, trong tất cả các hội nghị sau này hướng tới ứng dụng công nghệ thông tin, không giấy.
Đại tá Phạm Anh Tuấn, Chủ nhiệm Chính trị Quân khu phát biểu tại hội nghị.

Các đồng chí tham gia buổi tập huấn.
Để buổi tập huấn đạt chất lượng, đồng chí Chủ nhiệm Chính trị Quân khu mong muốn các đồng chí giảng viên tích cực chia sẻ kinh nghiệm, hướng dẫn cài đặt hệ thống, quy trình vận hành. Đồng thời đề nghị các đồng chí trong Tiểu ban Kỹ thuật - Công nghệ thông tin, Tổ phục vụ nắm chắc các nội dung tập huấn; tăng cường trao đổi với giảng viên về những thuận lợi, khó khăn, vướng mắc trong quá trình vận hành, khai thác, sử dụng hệ thống. Qua đó góp phần nâng cao nhận thức, kiến thức và kỹ năng số, khai thác và sử dụng hiệu quả hệ thống phục vụ cho Đại hội.
Bạch Thiết

Bình luận

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

Sẵn sàng tổ chức Đại hội đại biểu Đảng bộ Quân khu 7, lần thứ XI

Sẵn sàng tổ chức Đạ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

10:19 12/08/2025

(QK7 Online) – Ngày 12/8, Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy ĐĂNG NHẬP 99OK COM TẶNG 99K chủ trì buổi kiểm tra công tác chuẩn bị Đạ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. Tham gia cùng đoàn kiểm tra có Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu; Thiếu tướng Trần Ngọc Minh, Ủy viên Đảng ủy Quân khu, Phó Tư lệnh Quân khu; Đại tá Phạm Anh Tuấn, Ủy viên Thường vụ Đảng ủy Quân khu, Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu; thủ trưởng các cơ quan Quân khu.

Đại hội đại biểu Đảng bộ Quân sự tỉnh Tây Ninh thành công tốt đẹp

Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân sự tỉnh Tây Ninh thành công tốt đẹp

19:59 10/08/2025

(QK7 Online) - Qua 2 ngày làm việc tích cực, khẩn trương và nghiêm túc, chiều 10/8, Đại hội đại biểu (ĐHĐB) 123 Win 88ok trang chủ chính thức Quân sự tỉnh Tây Ninh lần thứ I, nhiệm kỳ 2025 - 2030 hoàn thành toàn bộ nội dung chương trình và bế mạc thành công tốt đẹp. Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu dự và phát biểu chỉ đạo đại hội.

Tổng duyệt chương trình Đại hội đại biểu Đảng bộ Quân khu 7 lần thứ XI, nhiệm kỳ 2025 - 2030

Tổng duyệt chương trình Đạ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

15:30 10/08/2025

(QK7 Online) – Ngày 10/8, Ban Thường vụ Đảng ủy ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức tổng duyệt các nội dung, chương trình của Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân khu, lần thứ XI, nhiệm kỳ 2025 – 2030. Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu chủ trì buổi tổng duyệt.

Sẵn sàng cho Đại hội đại biểu Đảng bộ Quân khu 7 lần thứ XI, nhiệm kỳ 2025-2030 thành công tốt đẹp

Sẵn sàng cho Đạ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 thành công tốt đẹp

11:51 10/08/2025

(QK7 Online) - Đạ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 sẽ diễn ra từ ngày 13 đến 15/8/2025 tại Hội trường ĐĂNG NHẬP 99OK COM TẶNG 99K. Đây là sự kiện chính trị đặc biệt quan trọng, đợt sinh hoạt chính trị sâu rộng trong 123 Win 88ok trang chủ chính thức và LLVT Quân khu.

Đảng bộ Quân sự tỉnh Tây Ninh khai mạc Đại hội đại biểu lần thứ I, nhiệm kỳ 2025 - 2030

123 Win 88ok trang chủ chính thức Quân sự tỉnh Tây Ninh khai mạc Đại hội đại biểu lần thứ I, nhiệm kỳ 2025 - 2030

11:03 10/08/2025

(QK7 Online) - Sáng 10/8, 123 Win 88ok trang chủ chính thức Quân sự tỉnh Tây Ninh chính thức khai mạc Đại hội đại biểu (ĐHĐB) lần thứ I, nhiệm kỳ 2025 - 2030. Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu dự và phát biểu chỉ đạo đại hội. Tham dự đại hội có 169 đại biểu, đại diện cho 2886 đảng viên trong toàn 123 Win 88ok trang chủ chính thức Quân sự tỉnh.

Sư đoàn 5 ra sức thi đua hướng về Đại hội đại biểu Đảng bộ Quân khu 7 lần thứ XI, nhiệm kỳ 2025 - 2030

Sư đoàn 5 ra sức thi đua hướng về Đạ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

22:32 07/08/2025

(QK7 Online) - Đạ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 là sự kiện chính trị có ý nghĩa quan trọng, đánh dấu bước trưởng thành vượt bậc của toàn lực lượng vũ trang (LLVT) Quân khu.

Quân khu 7 kiểm tra sẵn sàng chiến đấu tại Ban Chỉ huy Phòng thủ khu vực 3 - Đồng Xoài

ĐĂNG NHẬP 99OK COM TẶNG 99K kiểm tra sẵn sàng chiến đấu tại 123Win99ok Sân chơi uy tín 99Ok 123Win phiên bản mới khu vực 3 - Đồng Xoài

21:52 07/08/2025

(QK7 Online) - Chiều ngày 7/8, Quân khu kiểm tra công tác sẵn sàng chiến đấu (SSCĐ) dịp kỷ niệm 80 năm Cách mạng tháng Tám thành công và Quốc khánh nước Cộng hòa xã hội chủ nghĩa Việt Nam 2/9; kết quả sắp xếp, tổ chức lại cơ quan quân sự địa phương tại 123Win99ok Sân chơi uy tín 99Ok 123Win phiên bản mới khu vực 3 - Đồng Xoài (PTKV3), Bộ CHQS tỉnh Đồng Nai.

Chương trình “Dưới cờ vinh quang” được kết nối tại ba điểm cầu: Thành phố Hà Nội, Thành phố Huế và Thành phố Hồ Chí Minh

Chương trình “Dưới cờ vinh quang” được kết nối tại ba điểm cầu: Thành phố Hà Nội, Thành phố Huế và Thành phố Hồ Chí Minh

20:53 07/08/2025

(QK7 Online) - Tối ngày 7/8 tại Quảng trường Ba Đình, Hà Nội đã diễn ra buổi tổng duyệt chương trình chính luận nghệ thuật “Dưới cờ vinh quang”. Đại tướng Trịnh Văn Quyết, Bí thư Trung ương Đảng, Ủy viên Thường vụ Quân ủy Trung ương, Chủ nhiệm Tổng cục 99Oke123 Tải ứng dụng Quân đội 123Win com 79 nạp - rút nhanh Việt Nam chủ trì buổi tổng duyệt. Tham dự có Thượng tướng Lê Quang Minh, Phó Chủ nhiệm Tổng cục 99Oke123 Tải ứng dụng QĐND Việt Nam; Thượng tướng Trương Thiên Tô, Phó Chủ nhiệm Tổng cục 99Oke123 Tải ứng dụng QĐND Việt Nam; thủ trưởng các cơ quan 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao.

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