/* * Solo - A small and beautiful blogging system written in Java. * Copyright (c) 2010-present, b3log.org * * 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.1.0, Apr 19, 2019 */ /** * @description 皮肤脚本 * @static */ var Skin = { init: function () { Util.initPjax() $('#headerDown').click(function () { $('html, body').animate({scrollTop: $(window).height()}, 300) }) $(window).scroll(function (event) { $('.fn__progress').attr('value', parseInt($(window).scrollTop())). attr('max', parseInt($('body').outerHeight() - $(window).height())) if ($(window).scrollTop() > $(window).height() - 20) { $('.side__menu').addClass('side__menu--edge') $('.side__top').removeClass('side__top--bottom') } else { $('.side__menu').removeClass('side__menu--edge') $('.side__top').addClass('side__top--bottom') } }) $('.header').circleMagic({ clearOffset: 0.3, color: 'rgba(255,255,255, .2)', density: 0.2, radius: 15, }) new Ribbons({ colorSaturation: '60%', colorBrightness: '50%', colorAlpha: 0.5, colorCycleSpeed: 5, verticalPosition: 'random', horizontalSpeed: 200, ribbonCount: 3, strokeSize: 0, parallaxAmount: -0.2, animateSections: true, }) $('.side__menu').click(function () { $('.side__main').addClass('side__main--show').show() }) $('.side__bg, .side__close').click(function () { $('.side__main').removeClass('side__main--show') setTimeout(function () { $('.side__main').hide() }, 1000) }) $('.side__top').click(function () { if ($(this).hasClass('side__top--bottom')) { Util.goBottom() } else { Util.goTop() } }) var timer = 0 var blogTitle = $('.header__h1').text() document.addEventListener('visibilitychange', function () { if (timer) clearTimeout(timer) if (document.hidden) { timer = setTimeout(function () { document.title = '(◍´꒳`◍)' + ' - ' + blogTitle }, 500) } else { document.title = '(*´∇`*) 欢迎回来!' timer = setTimeout(function () { document.title = blogTitle }, 1000) } }, false) $(window).scroll() }, initArticle: function () { page.share() var $articleTocs = $('.vditor-reset [id^=b3_solo_h]') var $articleToc = $('.article__toc') var $articleProgress = $('.article__progress') if ($articleToc.length === 1) { if ($(window).width() > 876) { $('.post__toc'). css('left', $('.article .item__content').offset().left + $('.article .item__content').outerWidth() - 80) } else { $('.post__toc a').click(function () { $('.post__toc').hide() }) } } $articleToc.find('a').click(function (event) { var id = $(this).attr('href') window.location.hash = id $(window).scrollTop($(id).offset().top - 60) event.preventDefault() event.stopPropagation() return false }) $(window).unbind('scroll').scroll(function (event) { if ($articleProgress.length === 0) { return false } $articleProgress.attr('value', parseInt($(window).scrollTop())). attr('max', parseInt($('body').outerHeight() - $(window).height())) if ($(window).scrollTop() > 236) { $('.article__top').css('top', 0) } else { $('.article__top').css('top', -61) } if ($('.article__toc li').length === 0) { return false } if ($(window).width() > 876) { if ($(window).scrollTop() > 975 && $(window).scrollTop() < $('.article').outerHeight() + 100) { $('.post__toc').show() } else { $('.post__toc').hide() } } // 界面各种图片加载会导致帖子目录定位 var toc = [] $articleTocs.each(function (i) { toc.push({ id: this.id, offsetTop: $(this).offset().top, }) }) // 当前目录样式 var scrollTop = $(window).scrollTop() for (var i = 0, iMax = toc.length; i < iMax; i++) { if (scrollTop < toc[i].offsetTop - 61) { $articleToc.find('li').removeClass('current') var index = i > 0 ? i - 1 : 0 $articleToc.find('a[href="#' + toc[index].id + '"]'). parent(). addClass('current') break } } if (scrollTop >= toc[toc.length - 1].offsetTop - 61) { $articleToc.find('li').removeClass('current') $articleToc.find('li:last').addClass('current') } }) $(window).scroll() }, } $(document).ready(function () { Skin.init() })