UNPKG

halo-theme-dream2.0-plus

Version:

梦之城,童话梦境,动漫类型博客主题。

846 lines (818 loc) 29.5 kB
window.encrypt = (str) => window.btoa(unescape(encodeURIComponent(str))) window.decrypt = (str) => decodeURIComponent(escape(window.atob(str))) const commonContext = { /* 初始化widget */ initWidget() { const BREAKPOINT = 1216 const $rightCol = $('.column-right') const $shadowCol = $('.column-right-shadow') // 检查元素是否存在 if (!$rightCol.length || !$shadowCol.length) return const $window = $(window) // 监听窗口大小变化(使用防抖优化性能) $(window).on('resize', debounce(checkWidgetPosition, 50)) function checkWidgetPosition() { const windowWidth = $window.width() const isMoved = $shadowCol.children().length > 0 // 移动到左侧的条件 if (windowWidth < BREAKPOINT && !isMoved) { $rightCol.children().detach().appendTo($shadowCol) $shadowCol.addClass('is-active') } // 移回右侧的条件 else if (windowWidth >= BREAKPOINT && isMoved) { $shadowCol.children().detach().appendTo($rightCol) $shadowCol.removeClass('is-active') } } // 防抖函数 function debounce(func, wait) { let timeout return function () { const context = this const args = arguments clearTimeout(timeout) timeout = setTimeout(function () { func.apply(context, args) }, wait) } } // 初始检查窗口大小 checkWidgetPosition() }, /* 初始化目录和公告模块 */ initTocAndNotice() { const {pathname} = location window.tocPjax && window.tocPjax() let hideToc = $('.widget.toc .card-content ul').length === 0 let hideNotice = (DreamConfig.notice_show_mode === 'toc' && !hideToc) || (DreamConfig.notice_show_mode === 'index' && pathname !== '/') if (hideToc) { $('.widget.toc,.action-toc').addClass('is-hidden-all') } else { $('.widget.toc,.action-toc').removeClass('is-hidden-all') } if (hideNotice) { $('.widget.notice').addClass('is-hidden-all') } else { $('.widget.notice').removeClass('is-hidden-all') } }, /* 更新横幅大图的文字描述 */ initBanner() { const $bannerInfoDesc = $('.banner-info-desc') if ($bannerInfoDesc.length === 0) return const bannerDesc = $bannerInfoDesc.text() $bannerInfoDesc.text('') let currentBannerDesc = '' let isWrite = true let id const updateDesc = function () { let num = currentBannerDesc.length if (isWrite && num < bannerDesc.length) { currentBannerDesc += bannerDesc.charAt(num) $bannerInfoDesc.text(currentBannerDesc) } else if (!isWrite && num > 0) { currentBannerDesc = currentBannerDesc.slice(0, num - 1) $bannerInfoDesc.text(currentBannerDesc) } else { clearInterval(id) isWrite = !isWrite id = setInterval(updateDesc, isWrite ? 500 : 80) } } id = setInterval(updateDesc, isWrite ? 500 : 80) }, /* 激活图片预览功能 */ initGallery() { // 用链接和标题包装图像 $('.main-content img:not(.not-gallery)').each(function () { if ($(this).parents('[data-fancybox],mew-photos').length === 0) { $(this).wrap(`<div class="gallery-item"><div data-fancybox="gallery" data-options='{"hash": false}' ${this.alt ? `data-caption="${this.alt}"` : ''} href="${$(this).attr('src') }"></div>${(this.alt && DreamConfig.show_img_name) ? `<p>${this.alt}</p>` : ''}</div>`) } }) }, /* 初始化主题模式(仅用户模式) */ initMode() { //检查是否将暗黑模式保存到 localStorage const hasNightInLocal = () => { const value = localStorage.getItem('night') return value === 'true' || value === 'false' } //根据配置读取默认模式 const getNightInConfig = () => { if (DreamConfig.default_theme === 'night') { return true } if (DreamConfig.default_theme === 'system') { return matchMedia('(prefers-color-scheme: dark)').matches } return false } //是否是暗黑模式 let isNight = hasNightInLocal() ? localStorage.getItem('night') === 'true' // 检查 localStorage : getNightInConfig() // 否则走配置逻辑 const applyNight = (isNightValue) => { if (isNightValue) { $('html').addClass('color-scheme-dark').removeClass('color-scheme-light').addClass('night').attr('night', true) } else { $('html').addClass('color-scheme-light').removeClass('color-scheme-dark').removeClass('night').removeAttr('night') } //doc文档的配色方案 localStorage.setItem('color-scheme', isNightValue ? 'dark' : 'light') localStorage.setItem('special-efficacy-scheme', isNightValue ? 'dark' : 'light') isNight = isNightValue } //切换按钮 $('#toggle-mode').on('click', () => { //应用配色方案,并切换isNight的状态 applyNight(!isNight) //只有点击了切换才需要保存到localStorage localStorage.setItem('night', isNight) }) //应用初始配色方案 applyNight(isNight) }, /* 导航条高亮 */ initNavbar() { const $nav_menus = $('.navbar-nav a') const $nav_side_menus = $('.panel-side-menu .link') let activeIndex = 0 const {href, pathname} = location if (pathname && pathname !== '/') { for (let i = 0; i < $nav_menus.length; i++) { const cur_href = $nav_menus[i].getAttribute('href') if (pathname.includes(cur_href) || href.includes(cur_href)) { activeIndex = i if (pathname === cur_href || href === cur_href) break } } } // 高亮PC端 const $curMenu = $nav_menus.eq(activeIndex) $curMenu.addClass('current') if ($curMenu.parents('.item-dropdown').length) { $curMenu .parents('.item-dropdown') .find('.item-dropdown-link a') .addClass('current') } // 高亮移动端 $nav_side_menus.eq(activeIndex).addClass('current') }, /* 搜索框弹窗 */ searchDialog() { const $result = $('.navbar-search .result') $('.navbar-search .input').on('click', function (e) { e.stopPropagation() $result.addClass('active') }) $(document).on('click', function () { $result.removeClass('active') }) }, /* 激活导航栏全局下拉框功能 */ initDropMenu() { $('.item-dropdown').each(function (index, item) { const menu = $(this).find('.item-dropdown-menu') const trigger = $(item).attr('trigger') || 'click' const placement = $(item).attr('placement') || $(this).height() || 0 menu.css('top', placement) if (trigger === 'hover') { $(this).hover( () => $(this).addClass('active'), () => $(this).removeClass('active') ) } else { $(this).on('click', function (e) { e.stopPropagation() $(this).toggleClass('active') $(document).one('click', () => $(this).removeClass('active')) e.stopPropagation() }) menu.on('click', (e) => e.stopPropagation()) } }) }, /*初始化任务列表,禁止点击*/ iniTaskItemDisabled() { $('li[data-type="taskItem"]').each(function () { $(this).find('label > input[type="checkbox"]').prop('disabled', true) }) }, /* 激活登录窗口下拉框功能 */ initLogonMenu() { $('.navbar-logon').each(function (index, item) { const trigger = $(item).attr('trigger') || 'click' if (trigger === 'hover') { $(this).hover( () => $(this).addClass('active'), () => $(this).removeClass('active') ) } else { $(this).on('click', function (e) { e.stopPropagation() $(this).toggleClass('active') $(document).one('click', () => $(this).removeClass('active')) e.stopPropagation() }) } }) }, /* 处理滚动 */ initScroll() { window.initTop = 0 // true:上划,false:下滑 function scrollDirection(currentTop) { const result = currentTop > window.initTop window.initTop = currentTop return result } const handleScroll = () => { const scrollTop = $(document).scrollTop() const direction = scrollDirection(scrollTop) const $body = $('body') const $actions = $('.actions') if (scrollTop > 50 && direction) { $body.addClass('move-up') } else { $body.removeClass('move-up') } if (scrollTop > 100) { $actions.addClass('show') } else { $actions.removeClass('show') } } document.addEventListener('scroll', handleScroll) }, /* 小屏幕伸缩侧边栏,包含导航或者目录 */ drawerMobile() { $('.navbar-slideicon').on('click', function (e) { e.stopPropagation() /* 关闭搜索框 */ $('.navbar-searchout').removeClass('active') /* 处理开启关闭状态 */ const $html = $('html') const $mask = $('.navbar-mask') const $slide_out = $('.navbar-slideout') if ($slide_out.hasClass('active')) { $html.removeClass('disable-scroll') $mask.removeClass('active slideout') $slide_out.removeClass('active') } else { $html.addClass('disable-scroll') $mask.addClass('active slideout') $slide_out.addClass('active') } }) $('.action-toc').on('click', function (e) { e.stopPropagation() /* 关闭搜索框 */ $('.navbar-searchout').removeClass('active') /* 处理开启关闭状态 */ const $html = $('html') const $mask = $('.navbar-mask') const $slide_out = $('.navbar-slideout') if ($slide_out.hasClass('active')) { $html.removeClass('disable-scroll') $mask.removeClass('active slideout') $slide_out.removeClass('active slideout-toc') } else { $html.addClass('disable-scroll') $mask.addClass('active slideout') $slide_out.addClass('active slideout-toc') } }) }, /* 激活全局返回顶部功能 */ back2Top() { $('#back-to-top').on('click', function () { $('body, html').animate({scrollTop: 0}, 400) }) }, /* 点击遮罩层关闭 */ maskClose() { $('.navbar-mask') .on('click', function (e) { e.stopPropagation() $('html').removeClass('disable-scroll') $('.navbar-mask').removeClass('active slideout') $('.navbar-searchout').removeClass('active') $('.navbar-slideout').removeClass('active slideout-toc') $('.navbar-above').removeClass('solid') }) .on('touchmove', (e) => e.preventDefault) $('.navbar .toc-content') .on('click', function (e) { e.stopPropagation() $('html').removeClass('disable-scroll') $('.navbar-mask').removeClass('active slideout') $('.navbar-slideout').removeClass('active slideout-toc') }) }, /* 移动端侧边栏菜单手风琴 */ sideMenuMobile() { $('.navbar-slideout-menu .current') .parents('.panel-body') .show() .siblings('.panel') .addClass('in') $('.navbar-slideout-menu .panel').on('click', function (e) { e.stopPropagation() const $this = $(this) const panelBox = $this.parent().parent() /* 清除全部内容 */ panelBox.find('.panel').not($this).removeClass('in') panelBox .find('.panel-body') .not($this.siblings('.panel-body')) .stop() .hide('fast') /* 激活当前的内容 */ $this.toggleClass('in').siblings('.panel-body').stop().toggle('fast') }) }, /* 初始化事件 */ initEvent() { let $body = $('body') function closeSelect(elem) { let $elem = $(elem) const closeSelect = $elem.attr('data-close') return closeSelect && closeSelect.trim() !== '' ? $elem.closest(closeSelect.trim()) : $elem } $body.on('click', '.click-close', function (e) { e.stopPropagation() closeSelect(this).remove() }) $body.on('click', '.click-animation-close', function (e) { e.stopPropagation() let selectElem = closeSelect(this) selectElem.addClass('close-animation') setTimeout(() => selectElem.remove(), 300) }) }, /* 离屏提示 */ offscreenTip() { if (Utils.isMobile() || (!DreamConfig.document_hidden_title && !DreamConfig.document_visible_title)) return let originTitle = document.title let timer = null document.addEventListener('visibilitychange', function () { if (document.hidden) { if (!DreamConfig.document_visible_title || document.title !== DreamConfig.document_visible_title) { originTitle = document.title } document.title = DreamConfig.document_hidden_title || originTitle clearTimeout(timer) } else { document.title = DreamConfig.document_visible_title || originTitle DreamConfig.document_visible_title && (timer = setTimeout(function () { if (document.title === DreamConfig.document_visible_title) { document.title = originTitle } }, 2000)) } }) }, /** 初始化轮播 **/ initCarousel() { window.Swiper && new Swiper('.swiper', { loop: true, parallax: true, effect: 'slide', spaceBetween: 10, speed: 600, autoplay: { delay: 3000, disableOnInteraction: false, pauseOnMouseEnter: true, }, pagination: { el: '.swiper-pagination', clickable: true, }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, }) }, /** 关闭画廊 **/ closeFancybox() { // 检测Fancybox是否打开 if (document.querySelector('.fancybox-container')) { // 关闭Fancybox $.fancybox.close() } }, /* 个人信息界面打印彩字 */ sparkInput() { const sparkInputContent = DreamConfig.spark_input_content && DreamConfig.spark_input_content.filter(s => s.length > 0) if (sparkInputContent && sparkInputContent.length > 0) { Utils.cachedScript(`${DreamConfig.theme_base}/js/spark-input.min.js?mew=${DreamConfig.theme_version}`, function () { $('.spark-input').each((index, domEle) => sparkInput(domEle, [domEle.innerText, ...sparkInputContent])) }) } }, /* 恋爱墙倒计时 */ loveTime() { let $elem = $('.love .love-time') if ($elem.length === 0) return let loveTime = $elem.attr('data-time') if (!/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/.test(loveTime)) { $elem.text(loveTime) return } const grt = new Date(loveTime) setInterval(function () { let now = new Date(Date.now()) let difference = parseInt((now - grt) / 1000) let seconds = difference % 60 difference = parseInt(difference / 60) let minutes = difference % 60 difference = parseInt(difference / 60) let hours = difference % 24 let days = parseInt(difference / 24) let year = 0 let grtYear = grt.getFullYear() let nowYear = now.getFullYear() while (grtYear < nowYear) { if ((grtYear % 4 === 0 && grtYear % 100 !== 0) || grtYear % 400 === 0) { // 闰年366天 if (days < 366) break days -= 366 year += 1 grtYear += 1 } else { // 平年365天 if (days < 365) break days -= 365 year += 1 grtYear += 1 } } if (year !== 0) { $elem.html(`${year}${days}${hours}${minutes}${seconds} 秒`) } else { $elem.html(`${days}${hours}${minutes}${seconds} 秒`) } }, 300) }, /* 激活建站倒计时功能 */ websiteTime() { if (!DreamConfig.website_time) { return } const websiteDate = document.getElementById('websiteDate') if (DreamConfig.website_time === '') { return } const grt = new Date(DreamConfig.website_time).getTime() setInterval(function () { let now = Date.now() let difference = parseInt((now - grt) / 1000) let seconds = difference % 60 if (String(seconds).length === 1) { seconds = '0' + seconds } difference = parseInt(difference / 60) let minutes = difference % 60 if (String(minutes).length === 1) { minutes = '0' + minutes } difference = parseInt(difference / 60) let hours = difference % 24 if (String(hours).length === 1) { hours = '0' + hours } let days = parseInt(difference / 24) websiteDate.innerHTML = `建站<span class="stand">${days}</span>天<span class="stand">${hours}</span>时<span class="stand">${minutes}</span>分<span class="stand">${seconds}</span>秒` }, 300) }, /* 显示web版权 */ webCopyright() { if (!DreamConfig.website_time) { return } const webCopyright = document.getElementById('webCopyright') const now = new Date() let nowYear = now.getFullYear() const grt = new Date(DreamConfig.website_time) let getYear = grt.getFullYear() if (nowYear === getYear) { webCopyright.innerText = '© ' + nowYear return } webCopyright.innerText = '© ' + getYear + '-' + nowYear }, /* 激活侧边栏人生倒计时 */ initTimeCount() { if (!$('.timelife').length) { return } if (timeLifeHour === new Date().getHours()) { return } let timelife = [ { title: '今日已经过去', endTitle: '小时', num: 0, percent: '0%', }, { title: '这周已经过去', endTitle: '天', num: 0, percent: '0%', }, { title: '本月已经过去', endTitle: '天', num: 0, percent: '0%', }, { title: '今年已经过去', endTitle: '个月', num: 0, percent: '0%', }, ] { let nowDate = +new Date() let todayStartDate = new Date(new Date().toLocaleDateString()).getTime() let todayPassHours = (nowDate - todayStartDate) / 1000 / 60 / 60 timeLifeHour = todayPassHours let todayPassHoursPercent = (todayPassHours / 24) * 100 timelife[0].num = parseInt(todayPassHours) timelife[0].percent = parseInt(todayPassHoursPercent) + '%' } { let weeks = { 0: 7, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, } let weekDay = weeks[new Date().getDay()] let weekDayPassPercent = (weekDay / 7) * 100 timelife[1].num = parseInt(weekDay) timelife[1].percent = parseInt(weekDayPassPercent) + '%' } { let year = new Date().getFullYear() let date = new Date().getDate() let month = new Date().getMonth() + 1 let monthAll = new Date(year, month, 0).getDate() let monthPassPercent = (date / monthAll) * 100 timelife[2].num = date timelife[2].percent = parseInt(monthPassPercent) + '%' } { let month = new Date().getMonth() + 1 let yearPass = (month / 12) * 100 timelife[3].num = month timelife[3].percent = parseInt(yearPass) + '%' } let htmlStr = '' timelife.forEach((item, index) => { htmlStr += ` <div class="item"> <div class="title"> ${item.title} <span class="text">${item.num}</span> ${item.endTitle} </div> <div class="progress"> <div class="progress-bar"> <div class="progress-bar-inner progress-bar-inner-${index}" style="width: ${item.percent}"></div> </div> <div class="progress-percentage">${item.percent}</div> </div> </div>` }) $('.aside-timelife').html(htmlStr) }, /* 安全链接 */ initSecurityLink() { if (!DreamConfig.enable_security_link || !DreamConfig.security_link_url || DreamConfig.security_link_url.length === 0) { return } $(document).on('click', 'a[href]:not([data-url-security]), hyperlink-inline-card[href]:not([data-url-security]), hyperlink-card[href]:not([data-url-security])', (event) => { var href = $(event.currentTarget).attr('href') if (!href || (!href.toLowerCase().startsWith('http://') && !href.toLowerCase().startsWith('https://'))) { return } // 判断是否为下载链接 const isDownloadLink = (url) => { const downloadExtensions = ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.zip', '.rar', '.7z', '.tar', '.gz', '.bz2', '.dmg', '.exe', '.msi', '.iso', '.apk'] return downloadExtensions.some(ext => url.toLowerCase().endsWith(ext)) } const isInternalLink = (url, domainList) => { // 将URL转换为小写并去除前导和尾随空格 url = url.toLowerCase().trim() // 处理协议相对路径或绝对路径,转换为完整URL if (url.startsWith('//')) { url = window.location.protocol + url } else if (url.startsWith('/')) { url = window.location.origin + url } // 去除以http/https开头的URL的尾部斜杠 if (url.startsWith('http://') || url.startsWith('https://')) { url = url.replace(/\/$/, '') } let parsedHostname try { parsedHostname = new URL(url).hostname } catch (e) { // URL解析失败,视为外部链接 return false } // 检查是否匹配任一域名 return domainList.some(domain => { if (domain.startsWith('*.')) { // 处理泛域名 const mainDomain = domain.slice(2) // 移除开头的*. const mainParts = mainDomain.split('.') const hostParts = parsedHostname.split('.') // 检查host的尾部是否与主域名匹配,并且存在子域 return ( hostParts.length > mainParts.length && hostParts.slice(-mainParts.length).join('.') === mainDomain ) } else { // 处理完整域名 return parsedHostname === domain } }) } if (isDownloadLink(href)) { event.preventDefault() // 如果是下载链接,直接跳转 window.open(href, '_blank') } else if (!isInternalLink(href, DreamConfig.security_link_whitelist)) { event.preventDefault() window.open((DreamConfig.security_link_url + '?target=' + encodeURIComponent(href)), '_blank') } }) }, /* 灰色模式 */ initGrayMode() { if (DreamConfig.gray_mode === true) { $('html').addClass('gray-mode') } else if (DreamConfig.gray_mode === 'custom' && DreamConfig.gray_mode_time_list) { const now = new Date() const month = now.getMonth() + 1 const day = now.getDate() const isDateInRange = (currentMonth, currentDay, timeRange) => { let find = false const [startDate, endDate] = timeRange.time.split('|').map(part => part.trim()) if (!startDate || !endDate) { return find } const [startMonth, startDay] = startDate.split('/').map(part => part.trim()).map(Number) const [endMonth, endDay] = endDate.split('/').map(part => part.trim()).map(Number) if (!startMonth || !startDay || !endMonth || !endDay) { return find } const start = new Date(now.getFullYear(), startMonth - 1, startDay) const end = new Date(now.getFullYear(), endMonth - 1, endDay) const current = new Date(now.getFullYear(), currentMonth - 1, currentDay) find = current >= start && current <= end if (find && timeRange.desc) { Qmsg.info(timeRange.desc) } return find } for (const timeRange of DreamConfig.gray_mode_time_list) { try { if (isDateInRange(month, day, timeRange)) { $('html').addClass('gray-mode') break } } catch (e) { console.log(e) } } } }, /* 初始化特效,只需要初始化一次,移动端设备不初始化 */ initEffects() { if (Utils.isMobile()) return DreamConfig.cursor_move && Utils.cachedScript(`${DreamConfig.theme_base}/js/cursor/move/${DreamConfig.cursor_move}.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.cursor_click && Utils.cachedScript(`${DreamConfig.theme_base}/js/cursor/click/${DreamConfig.cursor_click}.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.enable_live2d && Utils.cachedScript(`${DreamConfig.theme_base}/js/autoload.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_lantern_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/lantern.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_sakura_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/sakura.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_snowflake_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/snowflake.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_universe_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/universe.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_circle_magic_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/circleMagic.min.js?mew=${DreamConfig.theme_version}`) DreamConfig.effects_quantum_silk_thread_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/quantum.min.js?mew=${DreamConfig.theme_version}`) }, /* 显示主题版本信息 */ showThemeVersion() { if (!DreamConfig.enable_console_version_info) { return } window.logger(`%c页面加载耗时:${Math.round(performance.now())}ms | Theme By Dream2 Plus ${DreamConfig.theme_version}`, 'color:#fff; background: linear-gradient(270deg, #986fee, #8695e6, #68b7dd, #18d7d3); padding: 8px 15px; border-radius: 0 15px 0 15px') }, /* 控制是否显示Banner */ showBanner(pathname = location.pathname) { const bannerElement = document.querySelector('.banner') const sectionElement = document.querySelector('.section') if (bannerElement) { if (pathname !== '/') { bannerElement.classList.add('hidden') if (sectionElement && DreamConfig.header_fixed) { sectionElement.classList.add('section-top') } } else { bannerElement.classList.remove('hidden') if (sectionElement && DreamConfig.header_fixed) { sectionElement.classList.remove('section-top') } } } }, /* 自动播放Banner视频 */ playBannerVideo() { var videoElement = document.querySelector('.banner video') if (!videoElement) { return } // 设置循环播放相关属性 videoElement.loop = true // 关键属性:启用循环 videoElement.muted = true // 静音更易自动播放 videoElement.setAttribute('playsinline', '') // iOS内联播放 videoElement.setAttribute('webkit-playsinline', '') // 旧版iOS支持 function playVideo() { try { if (videoElement.paused) { var playPromise = videoElement.play() // 处理可能返回的Promise if (playPromise !== undefined) { playPromise.catch(function (error) { console.log('视频播放失败:', error) }) } } } catch (e) { console.log('播放错误:', e) } } // 确保循环播放正常工作 videoElement.addEventListener('ended', function() { videoElement.currentTime = 0 // 重置播放位置 playVideo() // 重新播放 }, false) // 兼容IE11的事件监听 function addOneTimeEventListener(element, event, callback) { var handler = function () { callback() // IE11不支持removeEventListener的useCapture参数 if (element.removeEventListener) { element.removeEventListener(event, handler) } else if (element.detachEvent) { // 兼容IE8及更早版本 element.detachEvent('on' + event, handler) } } if (element.addEventListener) { element.addEventListener(event, handler) } else if (element.attachEvent) { // 兼容IE8及更早版本 element.attachEvent('on' + event, handler) } } // 添加点击/触摸事件监听 addOneTimeEventListener(document, 'click', playVideo) // 为移动设备添加触摸事件支持 addOneTimeEventListener(document, 'touchend', playVideo) // 尝试自动播放 playVideo() }, } window.commonContext = commonContext let timeLifeHour = -1 !(function () { const loads = ['initCarousel', 'sparkInput', 'websiteTime', 'playBannerVideo'] const omits = ['initEffects', 'showThemeVersion', 'iniTaskItemDisabled'] Object.keys(commonContext).forEach( (c) => !loads.includes(c) && !omits.includes(c) && commonContext[c]() ) // 当前html加载完执行 document.addEventListener('DOMContentLoaded', function () { $('html').addClass('loaded') loads.forEach((c) => commonContext[c] && commonContext[c]()) }) // 所有内容加载完执行 window.addEventListener('load', function () { omits.forEach((c) => commonContext[c] && commonContext[c]()) $('html').addClass('ready') }) })()