/*
******The author
******Tan
*/
//关闭videojs的ga统计
window.HELP_IMPROVE_VIDEOJS = false;
if ($('#image_site').get(0)) {
// 图片浏览
Fancybox.bind('[data-fancybox]', {
toolbar: true,
loop: true,
smallBtn: false,
buttons: ["zoom", "slideShow", "fullScreen", "download", "thumbs", "close"],
iframe: {
preload: false
},
on: {
startSlideshow: function(fancybox) {
//console.log('startSlideshow', arguments);
},
endSlideshow: function(fancybox) {
console.log('current', fancybox.getSlide());
}
}
});
//需要浏览器支持naturalWidth
var saveSmallImg = function(imgEl, cateId) {
var width = imgEl.width,
height = imgEl.height,
naturalWidth = imgEl.naturalWidth,
naturalHeight = imgEl.naturalHeight;
if (!naturalWidth || naturalWidth <= 600 || naturalHeight <= 500 ||
(typeof(disableSmallImage) != 'undefined' && disableSmallImage)
) {
return false;
}
var aspect = naturalHeight / naturalWidth;
var canvas = document.createElement('canvas');
if (naturalWidth <= naturalHeight) {
canvas.width = width * 2.5 <= 600 ? width * 2.5 : 600;
canvas.height = canvas.width * aspect;
}else {
canvas.height = height * 2.5 <= 500 ? height * 2.5 : 500;
canvas.width = canvas.height / aspect;
}
var ctx = canvas.getContext('2d');
ctx.drawImage( imgEl, 0, 0, canvas.width, canvas.height );
var smallImg = canvas.toDataURL('image/jpeg');
if (smallImg && /^data:image\/.+;base64,/i.test(smallImg)) {
imgEl.src = smallImg;
var params = {
id: $(imgEl).attr('data-id'),
data: smallImg
};
if (typeof(cateId) != 'undefined' && cateId) {
params.pid = cateId;
}
$.ajax({
url: '/site/savesmallimg',
method: 'POST',
dataType: 'json',
data: params
}).done(function(data) {
if (data.code != 1) {
console.warn('小尺寸图片数据保存失败', data.msg);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error('小尺寸图片数据保存失败,错误信息:' + errorThrown);
});
}
};
//https://github.com/verlok/vanilla-lazyload
var myLazyLoad = new LazyLoad({
data_src: 'original',
callback_error: function(el, ioe, lazyins) {
el.src = '/img/default.png';
},
callback_loaded: function(el, ioe, lazyins) {
saveSmallImg(el);
}
});
//设置目录封面图
$('.btn-set-snap').click(function(evt) {
evt.preventDefault();
evt.stopPropagation();
var btn = $(evt.target),
cateId = $(btn).parents('a').attr('data-pid'),
imgUrl = $(btn).parents('a').find('img.im_img').attr('src');
if (cateId && imgUrl) {
var params = {
id: cateId,
url: imgUrl
};
$(btn).prop('disabled', true);
$.ajax({
url: '/site/savedirsnap',
method: 'POST',
dataType: 'json',
data: params
}).done(function(data) {
$(btn).prop('disabled', false);
if (data.code != 1) {
console.warn('目录封面图保存失败', data.msg);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
$(btn).prop('disabled', false);
console.error('目录封面图保存失败,错误信息:' + errorThrown);
});
}
});
// 返回顶部
var scrolltop = $('#image_site .scroll_topJS');
var timer_icon_fade = null;
$(window).scroll(function () {
if (timer_icon_fade) {clearTimeout(timer_icon_fade);}
timer_icon_fade = setTimeout(function() {
if ($(window).scrollTop() > 100) {
scrolltop.fadeIn();
} else {
scrolltop.fadeOut();
}
}, 100);
});
scrolltop.on('touchstart click', function () {
$('html, body').animate({ scrollTop: 0 }, 380);
return false;
});
// 点击打开右侧弹出框
$('#image_site .connectmeJS').click(function () {
$('#image_site .blank_coverJS, #image_site .right_sideboxJS').removeClass('elementNone');
window.setTimeout(function () {
$('#image_site .blank_coverJS').addClass('opacityshow');
$('#image_site .right_sideboxJS').addClass('sideboxShow');
}, 0);
});
// 点击关闭右侧弹出框
$('#image_site .rtcloseJS').click(function () {
$('#image_site .blank_coverJS').removeClass('opacityshow');
$('#image_site .right_sideboxJS').removeClass('sideboxShow');
window.setTimeout(function () {
$('#image_site .blank_coverJS, #image_site .right_sideboxJS').addClass('elementNone');
}, 500);
});
}
// 白天黑夜模式切换
var saveLanpnumToLocalstorage = function(lanpnum) {
try {
var key = 'user_lanpnum';
localStorage.setItem(key, lanpnum);
}catch(err) {
console.error('保存本地存储失败', err);
}
};
var getLanpnumFromLocalstorage = function() {
try {
var key = 'user_lanpnum';
return localStorage.getItem(key);
}catch(err) {
console.error('保存本地存储失败', err);
}
return false;
};
var toggleLampshow = function(lanpnum) {
if (lanpnum == 1) {
$('#markdowncss').attr('href', '/css/github-markdown-dark.css');
$(document.body).addClass('lampshow');
$('.navbarJS').removeClass('navbar-default').addClass('navbar-inverse'); // 导航栏用bootstrap主题切换
} else if (lanpnum == 0) {
$('#markdowncss').attr('href', '/css/github-markdown-light.css');
$(document.body).removeClass('lampshow');
$('.navbarJS').addClass('navbar-default').removeClass('navbar-inverse');
}
};
var lanpnum = getLanpnumFromLocalstorage();
if (lanpnum !== false) {
toggleLampshow(lanpnum);
}
$('.lampJS').click(function () {
lanpnum = !lanpnum || lanpnum != 1 ? 1 : 0;
toggleLampshow(lanpnum);
saveLanpnumToLocalstorage(lanpnum);
});
//异步加载目录的封面图
$('.dir_item').each(function(index, el) {
var cid = $(el).attr('data-cid'), id = $(el).attr('data-id');
if ($(el).find('.im_img').length == 0) {
$.ajax({
url: '/site/dirsnap',
method: 'POST',
dataType: 'json',
data: {
cid: cid,
id: id
}
}).done(function(data) {
if (data.code == 1 && data.url) {
var imgHtml = '';
$(el).find('.im_img_title').before(imgHtml);
if (data.img_id) {
setTimeout(function() {
var imgs = $(el).find('.im_img');
if (imgs.length > 0) {
saveSmallImg(imgs[0], id);
}
}, 100);
}
}else {
//console.warn('目录 %s 里没有任何图片', id);
var imgHtml = '';
$(el).find('.im_img_title').before(imgHtml);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error('获取封面图失败,错误信息:' + errorThrown);
});
}
});
//刷新缓存
$('.cleanCacheJS').click(function () {
$.ajax({
url: '/site/cleancache',
dataType: 'json',
method: 'POST'
}).done(function(data) {
if (data.code == 1) {
location.href = '/';
}else {
alert('缓存清空失败,请稍后重试,错误信息:' + data.msg);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
alert('请求失败,请稍后重试,错误信息:' + errorThrown);
});
});
// 音乐播放
if ($('#music_main').length > 0) {
var musicState = 0;
$('#music_main').get(0).volume = 0.5; // 控制音量
$('#music_main').one('canplay', function() {
var cookieKey = 'audio_current_time';
var currentTime = Cookies.get(cookieKey);
if (currentTime > 0) {
this.currentTime = currentTime;
$('.musicJS').addClass('music_put');
}
});
$('.musicJS').click(function () {
if (musicState == 0) {
$('#music_main').get(0).play();
$('.musicJS').addClass('music_put');
musicState = 1;
} else {
$('#music_main').get(0).pause();
$('.musicJS').removeClass('music_put');
musicState = 0;
}
return;
})
$(document).one('touchstart mousedown', function () {
$('#music_main').get(0).play();
$('.musicJS').addClass('music_put');
musicState = 1;
});
$(window).on('beforeunload', function() {
$('#music_main').get(0).volume = 0.2; // 减小音量
var currentTime = $('#music_main').get(0).currentTime;
var cookieKey = 'audio_current_time';
Cookies.set(cookieKey, currentTime, { expires: 1 });
});
$(document.body).click(function(evt) {
var elA = $(evt.target).parents('a');
if (elA.length > 0 && elA.attr('target') == '_blank') { //点击视频暂停音乐
$('#music_main').get(0).pause();
$('.musicJS').removeClass('music_put');
musicState = 0;
}
});
}
//二维码显示
if ($('#qrimg').length > 0 && typeof(QRCode) != 'undefined') {
var qrcode = new QRCode("qrimg", {
text: location.href,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.L
});
}
var formatDuration = function(duration) {
var str = '00:00:00';
var hours = 0, minutes = 0;
if (duration > 3600) {
hours = Math.floor(duration / 3600);
}
if (duration > 60) {
minutes = Math.floor((duration-hours*3600) / 60);
}
var seconds = Math.floor(duration - hours*3600 - minutes*60);
str = hours.toString().padStart(2, '0') + ':'
+ minutes.toString().padStart(2, '0') + ':'
+ seconds.toString().padStart(2, '0');
return str;
};
//自动为列表页视频生成封面图并保存
var noSnapVideos = [];
if ($('#pr-player').length > 0 && typeof(videojs) != 'undefined') {
var myPlayer = videojs('pr-player', {
controls: false,
autoplay: false,
muted: true,
preload: 'auto'
});
var mc_video_id = '';
var tryToGetVideoSnapshot = function() {
if (noSnapVideos.length == 0 || mc_video_id) {return false;}
var videoItem = noSnapVideos.shift();
mc_video_id = videoItem.id;
try {
myPlayer.src(videoItem.url);
myPlayer.play();
}catch(err){
console.error('自动生成视频封面图失败', err);
}
};
myPlayer.on('playing', function() {
myPlayer.pause();
if (typeof(mc_video_id) != 'undefined' && mc_video_id) {
var height = myPlayer.videoHeight(), width = myPlayer.videoWidth(),
aspect = height / width;
var canvas = document.createElement('canvas');
var video = $('video.vjs-tech').get(0);
canvas.width = Math.ceil(360/aspect);
canvas.height = 360; //360p
var ctx = canvas.getContext('2d');
ctx.drawImage( video, 0, 0, canvas.width, canvas.height );
var snapshotImg = canvas.toDataURL('image/jpeg');
var duration = myPlayer.duration();
//更新视频封面图和视频时长
if (duration && snapshotImg && /^data:image\/.+;base64,/i.test(snapshotImg)) {
$('#poster_'+mc_video_id).attr('src', snapshotImg);
$('#poster_'+mc_video_id).parent('a').find('.duration').text(formatDuration(duration));
$('#poster_'+mc_video_id).parent('a').find('.playbtn').removeClass('hide');
saveVideoMeta(mc_video_id, {
duration: duration,
snapshot: snapshotImg
});
}
mc_video_id = ''; //reset
}
});
setInterval(tryToGetVideoSnapshot, 500);
}
//视频列表封面图加载
var getVideoMetaAndShowIt = function(videoId, videoUrl) {
$.ajax({
url: '/site/videometa',
method: 'GET',
dataType: 'json',
data: {
id: videoId
}
}).done(function(data) {
if (data.code != 1) {
console.warn(data.msg);
noSnapVideos.push({id: videoId, url: videoUrl});
}else {
$('#poster_'+videoId).attr('src', data.meta.snapshot);
$('#poster_'+videoId).parent('a').find('.duration').text(formatDuration(data.meta.duration));
$('#poster_'+videoId).parent('a').find('.playbtn').removeClass('hide');
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error('视频数据获取失败,错误信息:' + errorThrown);
});
};
$('.video-poster').each(function(index, el) {
var videoId = $(el).attr('data-video-id'),
videoUrl = $(el).attr('data-video-url');
getVideoMetaAndShowIt(videoId, videoUrl);
});
//保存视频数据
var saveVideoMeta = function(videoId, metaData, manual) {
var params = {
id: videoId,
meta: metaData
};
if (typeof(manual) != 'undefined' && manual) {
params.manual = 1;
}
$.ajax({
url: '/site/savevideometa',
method: 'POST',
dataType: 'json',
data: params
}).done(function(data) {
if (data.code != 1) {
console.warn('视频数据保存失败', data.msg);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error('视频数据保存失败,错误信息:' + errorThrown);
});
};
//视频播放器
if ($('#my-player').length > 0 && typeof(videojs) != 'undefined') {
var myPlayer = videojs('my-player', {
controls: true,
autoplay: true,
muted: true,
preload: 'auto'
});
var takeScreenshot = function(manual) {
//myPlayer.pause();
var height = myPlayer.videoHeight(), width = myPlayer.videoWidth(),
aspect = height / width;
var canvas = document.createElement('canvas');
var video = $('video.vjs-tech').get(0);
canvas.width = Math.ceil(360/aspect);
canvas.height = 360; //360p
var ctx = canvas.getContext('2d');
ctx.drawImage( video, 0, 0, canvas.width, canvas.height );
var snapshotImg = canvas.toDataURL('image/jpeg'),
duration = myPlayer.duration();
if (duration && snapshotImg && /^data:image\/.+;base64,/i.test(snapshotImg)) {
saveVideoMeta($('video.vjs-tech').attr('data-id'), {
duration: duration,
snapshot: snapshotImg
}, manual);
}
//myPlayer.play();
};
myPlayer.one('playing', function() {
var screenshot_start = $('video.vjs-tech').attr('data-screenshot-start');
if (screenshot_start) {
screenshot_start = parseInt(screenshot_start);
}
if (!screenshot_start) {
screenshot_start = 1000;
}
setTimeout(takeScreenshot, screenshot_start);
});
$('.btn-snapshot').click(function(e) {
var clickedBtn = $(e.target);
clickedBtn.prop('disabled', true);
var manual = 1;
takeScreenshot(manual);
setTimeout(function() {
clickedBtn.prop('disabled', false);
}, 3000);
});
}
//目录收拢、展开
$('.btn-dir-ext').click(function(evt) {
var cookieKey = 'dir_ext_status';
var status = $('.btn-dir-ext').attr('data-status'),
opened_title = $('.btn-dir-ext').attr('data-opened-title'),
closed_title = $('.btn-dir-ext').attr('data-closed-title');
if (status == 'opened') {
$('.btn-dir-ext').attr('data-status', 'closed');
$('.btn-dir-ext').parents('.gap-hr').prev('.im_mainl').addClass('hide');
$('.btn-dir-ext').find('img').attr('src', '/img/arrow-down.svg');
$('.btn-dir-ext').find('span').text(closed_title);
Cookies.set(cookieKey, 'closed', { expires: 1 });
}else {
$('.btn-dir-ext').attr('data-status', 'opened');
$('.btn-dir-ext').parents('.gap-hr').prev('.im_mainl').removeClass('hide');
$('.btn-dir-ext').find('img').attr('src', '/img/arrow-up.svg');
$('.btn-dir-ext').find('span').text(opened_title);
Cookies.set(cookieKey, 'opened', { expires: 1 });
}
});