/* * Solo - A small and beautiful blogging system written in Java. * Copyright (c) 2010-2018, b3log.org & hacpai.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ /** * @fileoverview util and every page should be used. * * @author Liyuan Li * @version 0.1.0.0, Feb 17, 2017 */ /** * @description 皮肤脚本 * @static */ var Skin = { _initCommon: function ($goTop) { $('body').on('click', '.content-reset img', function () { window.open(this.src) }) var $banner = $('header .banner'), $navbar = $('header .navbar') $(window).scroll(function () { if ($(window).scrollTop() > 125) { $goTop.show() } else { $goTop.hide() } if ($(window).width() < 701) { return false } if ($(window).scrollTop() > $banner.height()) { $navbar.addClass('pin') $('.main-wrap').parent().css('margin-top', '86px') } else { $navbar.removeClass('pin') $('.main-wrap').parent().css('margin-top', '0') } }) }, init: function () { if (!('IntersectionObserver' in window)) { $('.item').addClass('item--active') return false } if (window.imageIntersectionObserver) { window.imageIntersectionObserver.disconnect() $('.item').each(function () { window.imageIntersectionObserver.observe(this) }) } else { window.imageIntersectionObserver = new IntersectionObserver((entries) => { entries.forEach((entrie) => { if (typeof entrie.isIntersecting === 'undefined' ? entrie.intersectionRatio !== 0 : entrie.isIntersecting) { $(entrie.target).addClass('item--active') } else { if ($(entrie.target).closest('.side').length === 1) { return } $(entrie.target).removeClass('item--active') } }) }) $('.item').each(function () { window.imageIntersectionObserver.observe(this) }) } this._initCommon($('.icon-up')) $('.navbar nav a').each(function () { if (this.href === location.href) { this.className = 'current' } }) $('.responsive .list a').each(function () { if (this.href === location.href) { $(this).parent().addClass('current') } }) $('.responsive .icon-list').click(function () { $('.responsive .list').slideToggle() }) }, _initArticleCommon: function (tocLabel, siteViewLabel) { // TOC if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) { // add color to sidebar menu $('aside').addClass('has-toc') // append toc to sidebar menu var articleTocHTML = '
' $('aside').prepend(articleTocHTML) var $sectionF = $('aside section:first').html($('.b3-solo-list')), $sectionL = $('aside section:last') $sectionF.height($(window).height() - 154). css({'overflow': 'auto', 'width': $('aside').width() + 'px'}) $sectionL.hide() // 切换 tab $('aside > ul > li').click(function () { if ($(this).data('tab') === 'toc') { $sectionL.animate({ 'opacity': '0', 'top': '-50px', }, 300, function () { $sectionF.show().css('top', '-50px') $sectionF.animate({ 'opacity': '1', 'top': '0', }, 300).show() }) } else { $sectionF.animate({ 'opacity': '0', 'top': '-50px', }, 300, function () { $sectionF.hide().css('top', '-50px') $sectionL.animate({ 'opacity': '1', 'top': '0', }, 300).show() }).hide() } $('aside > ul > li').removeClass('current') $(this).addClass('current') }) $(window).scroll(function () { if ($(window).scrollTop() > 125) { $('aside section:eq(0)').css({ position: 'fixed', top: '51px', backgroundColor: '#fff', }) } else { $('aside section:eq(0)').css({ position: 'inherit', borderLeft: 0, }) } }) } }, initArticle: function (tocLabel, siteViewLabel) { this._initArticleCommon(tocLabel, siteViewLabel) setTimeout(function () { if ($('#externalRelevantArticlesWrap li').length === 0) { $('#externalRelevantArticlesWrap').next().remove() $('#externalRelevantArticlesWrap').remove() } if ($('#relevantArticlesWrap li').length === 0) { $('#relevantArticlesWrap').prev().remove() $('#relevantArticlesWrap').remove() } if ($('#randomArticlesWrap li').length === 0) { $('#randomArticlesWrap').prev().remove() $('#randomArticlesWrap').remove() } }, 1000) }, } Skin.init()