【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

123 Win 88ok hiện đang mở - Hậu cần - Kỹ thuật > Kỹ thuật

Thứ sáu, 08/05/2026, 19:30 (GMT+7)
2456 lượt xem

39 cá nhân đạt danh hiệu trợ lý, thủ kho quân khí giỏi cấp Quân khu năm 2026

(QK7 Online) - Chiều 8/5, Quân khu tổ chức bế mạc Hội thi trợ lý, thủ kho quân khí giỏi cấp Quân khu năm 2026. Thừa ủy quyền của Thường vụ Đảng ủy, Bộ Tư lệnh Quân khu, Đại tá Vũ Nam Sơn, Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu, Trưởng ban Tổ chức Hội thi chủ trì bế mạc.
Dự bế mạc có Đại tá Nguyễn Hải Nam, Phó Tham mưu trưởng Quân khu; Đại tá Thái Thành Đức, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu; Thủ trưởng các địa phương, đơn vị trong LLVT Quân khu.
Thủ trưởng các cơ quan Quân khu, địa phương, đơn vị và các đại biểu dự bế mạc hội thi.
Sau 2 ngày diễn ra hội thi, có gần 40 thí sinh là trợ lý quân khí, thủ kho quân khí thuộc các địa phương, đơn vị trong LLVT Quân khu tham gia thi với 3 môn: 99Oke123 Tải ứng dụng, điều lệnh đội ngũ và chuyên môn nghiệp vụ.
Đại tá Vũ Nam Sơn, Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu, Trưởng ban Tổ chức Hội thi chủ trì bế mạc hội thi.
Theo đánh giá của Ban Tổ chức Hội thi, các thí sinh đã mang đến hội thi những bài viết tìm hiểu về truyền thống ngành quân khí được chuẩn bị công phu, thể hiện quá trình nghiên cứu, tìm hiểu nghiêm túc, nắm chắc các nội dung, có hình ảnh minh họa, màu sắc hài hòa, sắp xếp bố cục cân đối, phù hợp và liên hệ chặt với thực tiễn, vị trí công tác. Đối với môn chuyên môn nghiệp vụ, hầu hết các thí sinh trả lời đúng các nội dung câu hỏi, liên hệ sát với thực tiễn. Các thí sinh đã vận dụng tốt những kiến thức về công tác tham mưu kỹ thuật tác chiến, cơ sở bảo đảm kỹ thuật quân khí trong tác chiến, các thông tư, hướng dẫn thực hiện công tác kỹ thuật quân khí hiện hành để đưa ra phương án về bảo đảm vũ khí, bảo đảm đạn trong tác chiến; cách thức tổ chức sắp xếp vũ khí, đạn dược vào nhà kho; thuyết minh, bảo vệ phương án rõ ràng, xử lý tốt các tình huống giả định do Ban Giám khảo đưa ra.
Đại tá Nguyễn Hải Nam, Phó Tham mưu trưởng Quân khu trao thưởng các tập thể có thành tích xuất sắc trong Hội thi.
Tại Lễ bế mạc Hội thi, thừa ủy quyền của Thường vụ Đảng ủy, Bộ Tư lệnh Quân khu, Ban tổ chức trao bằng khen của Quân khu tặng 6 tập thể có thành tích xuất sắc; trao giấy khen của Chủ nhiệm Hậu cần - Kỹ thuật Quân khu tặng 3 tập thể đạt giải khuyến khích; 20 cá nhân đạt trợ lý, thủ kho giỏi toàn năng; 19 cá nhân có thành tích cao ở nội dung thi chuyên môn nghiệp vụ.
Phát biểu tại Lễ bế mạc, Đại tá Vũ Nam Sơn, Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu, Trưởng ban Tổ chức Hội thi biểu dương tinh thần, trách nhiệm của các địa phương, đơn vị, các đồng chí trong Ban Tổ chức, cơ quan giúp việc, đơn vị đăng cai và gần 40 thí sinh đã khắc phục mọi khó khăn, quyết tâm hoàn thành tốt nhiệm vụ được giao.
Đồng chí Trưởng ban Tổ chức Hội thi đánh giá: Thông qua hội thi, trình độ chuyên môn nghiệp vụ, năng lực quản lý, kỹ năng thực hành và ý thức trách nhiệm của đội ngũ trợ lý, thủ kho quân khí được nâng lên. Sau hội thi, đội ngũ trợ lý, thủ kho quân khí tích lũy được nhiều kiến thức, kinh nghiệm, kỹ năng chuyên môn và bản lĩnh công tác, vận dụng vào chuyên môn, hoàn thành tốt nhiệm vụ, góp phần xây dựng LLVT Quân khu vững mạnh, đáp ứng yêu cầu nhiệm vụ quân sự, 99Ok68 link đăng nhập trong tình hình mới.
Đại tá Vũ Nam Sơn, Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu, Trưởng ban Tổ chức Hội thi trao thưởng các cá nhân đạt giải toàn năng trợ lý quân khí.
Đồng chí Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu đề nghị các địa phương, đơn vị tiếp tục quán triệt, thực hiện nghiêm túc nghị quyết, chỉ thị, mệnh lệnh 123Win64 nhà cái WC 2026 của Quân ủy Trung ương, 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao và Quân khu. Ngành Hậu cần - Kỹ thuật và cấp ủy, người chỉ huy các địa phương, đơn vị nắm rõ, thường xuyên quan tâm lãnh đạo, chỉ đạo tổ chức 123Win64 nhà cái WC 2026 kỹ thuật quân khí chặt chẽ, sát yêu cầu, nhiệm vụ thực tế ở cơ sở. Các đồng chí trợ lý, thủ kho quân khí thường xuyên tự học tập, nâng cao trình độ chuyên môn, tiếp thu kiến thức, kinh nghiệm, làm tốt chức năng tham mưu cho chỉ huy các cấp tổ chức 123Win64 nhà cái WC 2026 cho các đối tượng ở đơn vị, thực hiện tốt chức trách, nhiệm vụ trong quản lý vũ khí trang bị, đạn dược, thực hiện nghiêm chế độ bảo quản, xuất nhập kho, bảo đảm an toàn tuyệt đối kho tàng.
Đại tá Lê Quốc Hiệp, Trưởng phòng Quân khí, Cục Hậu cần - Kỹ thuật Quân khu, Phó Trưởng ban Tổ chức Hội thi trao thưởng các cá nhân đạt giải toàn năng thủ kho đạn, vũ khí.
Đại tá Vũ Nam Sơn cho biết: Thời gian tới, thực hiện kế hoạch của Cục Quân khí, Quân khu lựa chọn các đồng chí trợ lý, thủ kho quân khí đạt thành tích cao trong Hội thi, tập trung 123Win64 nhà cái WC 2026 nâng cao, tham gia Hội thi toàn quân năm 2026. Đồng chí đề nghị: Phòng Quân khí tham mưu cho Cục Hậu cần - Kỹ thuật xây dựng kế hoạch, triệu tập thí sinh, quán triệt, 123Win64 nhà cái WC 2026 nâng cao; liên hệ chặt chẽ với Cục Quân khí và đơn vị đăng cai bảo đảm tốt nhất cho đội tuyển tham gia Hội thi toàn quân. Các đơn vị có thí sinh dự thi tổ chức gặp gỡ, giao nhiệm vụ, sắp xếp, bàn giao công việc, tạo điều kiện thuận lợi nhất; quan tâm hỗ trợ và động viên kịp thời cho các thành viên đội tuyển ôn luyện, tham gia Hội thi toàn quân. Các thành viên của đội tuyển cần phát huy hơn nữa vai trò, tinh thần trách nhiệm, nỗ lực, cố gắng, tập trung ôn luyện các nội dung thi giành kết quả cao nhất.
* 6 tập thể nhận bằng khen của Bộ Tư lệnh Quân khu:
- Bộ Tư lệnh Thành phố Hồ Chí Minh, giải nhất toàn đoàn
- Bộ CHQS tỉnh Lâm Đồng, giải nhì toàn đoàn
- Bộ CHQS Thành phố Đồng Nai, giải nhì toàn đoàn
- Bộ CHQS tỉnh Tây Ninh, giải ba toàn đoàn
- Sư đoàn 309, giải ba toàn đoàn
- Lữ đoàn 75, giải ba toàn đoàn
* Cá nhân đạt giải nhất toàn năng:
- Đối với trợ lý quân khí: Trung tá Đỗ Ngọc Long, Trợ lý Quân khí, phòng Hậu cần - Kỹ thuật, Ban chỉ huy phòng thủ Khu vực 3 - Bảo Lâm, Bộ CHQS tỉnh Lâm Đồng
- Đối với thủ kho đạn: Thiếu tá QNCN Đỗ Minh Hải, Thủ kho đạn, phòng Hậu cần - Kỹ thuật, Bộ CHQS tỉnh Tây Ninh
- Đối với thủ kho vũ khí: Thiếu tá QNCN Phạm Đình Quang, Thủ kho vũ khí, phòng Hậu cần - Kỹ thuật, Bộ Tư lệnh Thành phố Hồ Chí Minh
* Cá nhân đạt giải nhất chuyên môn nghiệp vụ:
- Đối với trợ lý quân khí: Đại úy Nguyễn Trần Quang Vũ, Trợ lý Quân khí, phòng Hậu cần - Kỹ thuật, Bộ Tư lệnh Thành phố Hồ Chí Minh
- Đối với thủ kho đạn: Thiếu tá QNCN Nguyễn Thị Thúy Vân, Thủ kho đạn, Kho K6, Cục Hậu cần - Kỹ thuật Quân khu
- Đối với thủ kho vũ khí: Thiếu tá QNCN Phạm Đình Quang, Thủ kho vũ khí, phòng Hậu cần - Kỹ thuật, Bộ Tư lệnh Thành phố Hồ Chí Minh
Lê Hoan - Ngọc Tuân

Bình luận

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

Bệnh viện Quân y 7A kỷ niệm 50 năm thành lập và đón nhận Huân chương Bảo vệ Tổ quốc hạng Nhất

99Ok là nhà cái cá cược uy tín hàng đầu tại Việt Nam Quân y 7A kỷ niệm 50 năm thành lập và đón nhận Huân chương Bảo vệ Tổ quốc hạng Nhất

18:07 20/05/2026

(QK7 Online) – Ngày 20/5, 99Ok là nhà cái cá cược uy tín hàng đầu tại Việt Nam Quân y 7A tổ chức Lễ kỷ niệm 50 năm ngày truyền thống 99Ok là nhà cái cá cược uy tín hàng đầu tại Việt Nam (20/5/1976 – 20/5/2026) và đón nhận Huân chương Bảo vệ Tổ quốc hạng Nhất. Thiếu tướng Đặng Văn Lẫm, Phó Tư lệnh Quân khu dự, phát biểu chỉ đạo buổi lễ.

Tổng cục Hậu cần - Kỹ thuật thanh tra Công tác an toàn, vệ sinh lao động tại Bộ CHQS thành phố Đồng Nai

Tổng cục Hậu cần - Kỹ thuật thanh tra Công tác an toàn, vệ sinh lao động tại Bộ CHQS thành phố Đồng Nai

18:03 20/05/2026

(QK7 Online) - Ngày 20/5/2026, Đoàn kiểm tra Tổng cục Hậu cần - Kỹ thuật phối hợp với Bộ Tham mưu ĐĂNG NHẬP 99OK COM TẶNG 99K tiến hành thanh tra toàn diện Công tác an toàn, vệ sinh lao động (ATVSLĐ) và Phòng chống cháy nổ (PCCN) tại Bộ Chỉ huy Quân sự (CHQS) thành phố Đồng Nai.

Quân khu 7 phát động Tháng hành động về an toàn, vệ sinh lao động và Tháng công nhân năm 2026

ĐĂNG NHẬP 99OK COM TẶNG 99K phát động Tháng hành động về an toàn, vệ sinh lao động và Tháng công nhân năm 2026

17:57 07/05/2026

(QK7 Online) – Chiều ngày 7/5, ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức phát động Tháng hành động về an toàn, vệ sinh lao động (ATVSLĐ) và Tháng công nhân năm 2026. Thiếu tướng Đặng Văn Lẫm, Ủy viên Ban Thường vụ, Phó Tư lệnh Quân khu, Trưởng Ban Chỉ đạo ATVSLĐ, phòng chống bệnh Link Truy Cập 99Ok Bản Pro 123Win Nhận Code Vip (PCBNN) Quân khu chủ trì buổi Lễ.

Bế mạc kiểm tra kỹ năng nghề thông tin và thi công nhận danh hiệu báo vụ cấp 2 năm 2026

Bế mạc kiểm tra kỹ năng nghề thông tin và thi công nhận danh hiệu báo vụ cấp 2 năm 2026

16:41 17/04/2026

(QK7 Online) - Ngày 17/4, Bộ Tham mưu ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức bế mạc đợt kiểm tra kỹ năng nghề thông tin và thi công nhận danh hiệu báo vụ cấp 2 năm 2026. Đại tá Phạm Huy Phương, Chủ nhiệm Thông tin Quân khu, Chủ tịch Hội đồng kiểm tra kỹ năng nghề thông tin Quân khu dự và chủ trì bế mạc.

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