solo-skins/Bubble/js/common.js

169 lines
4.7 KiB
JavaScript

/*
* 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 <https://www.gnu.org/licenses/>.
*/
/**
* @fileoverview util and every page should be used.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.1.1.0, Jul 13, 2019
*/
/**
* @description 皮肤脚本
* @static
*/
var Skin = {
init: function () {
$('#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() / 2 - 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')
}
})
$('.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)
new Ribbons({
colorSaturation: '60%',
colorBrightness: '50%',
colorAlpha: 0.5,
colorCycleSpeed: 5,
verticalPosition: 'random',
horizontalSpeed: 200,
ribbonCount: 3,
strokeSize: 0,
parallaxAmount: -0.2,
animateSections: true,
})
if ($('#comments').length === 1) {
return
} else {
$(window).scroll()
}
$('.header').circleMagic({
clearOffset: 0.3,
color: 'rgba(255,255,255, .2)',
density: 0.2,
radius: 15,
})
},
initArticle: function () {
page.share()
initCanvas('articleTop')
$('.post__toc').css({
left: document.querySelector('.article__content').
getBoundingClientRect().right + 20,
right: 'auto',
display: 'block'
})
var $articleTocs = $('.vditor-reset [id^=b3_solo_h]')
var $articleToc = $('.article__toc')
$articleToc.find('a').click(function (event) {
var id = $(this).attr('href')
window.location.hash = id
$(window).scrollTop($(id).offset().top)
event.preventDefault()
event.stopPropagation()
return false
})
$(window).scroll(function (event) {
if ($('.article__toc li').length === 0) {
return false
}
// 界面各种图片加载会导致帖子目录定位
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) {
$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) {
$articleToc.find('li').removeClass('current')
$articleToc.find('li:last').addClass('current')
}
})
$(window).scroll()
},
}
$(document).ready(function () {
Skin.init()
})