429 lines
11 KiB
JavaScript
429 lines
11 KiB
JavaScript
// 初始化函数
|
|
let rm = {};
|
|
|
|
//禁止图片拖拽
|
|
rm.stopdragimg = $("img");
|
|
rm.stopdragimg.on("dragstart", function() {
|
|
return false;
|
|
});
|
|
|
|
// 显示菜单
|
|
rm.showRightMenu = function(isTrue, x = 0, y = 0) {
|
|
let $rightMenu = $('#rightMenu');
|
|
$rightMenu.css('top', x + 'px').css('left', y + 'px');
|
|
if (isTrue) {
|
|
$rightMenu.show();
|
|
stopMaskScroll()
|
|
} else {
|
|
$rightMenu.hide();
|
|
}
|
|
}
|
|
|
|
// 隐藏菜单
|
|
rm.hideRightMenu = function() {
|
|
rm.showRightMenu(false);
|
|
$('#rightmenu-mask').attr('style', 'display: none');
|
|
}
|
|
|
|
// 尺寸
|
|
let rmWidth = $('#rightMenu').width();
|
|
let rmHeight = $('#rightMenu').height();
|
|
|
|
// 重新定义尺寸
|
|
rm.reloadrmSize = function() {
|
|
rmWidth = $('#rightMenu').width();
|
|
rmHeight = $('#rightMenu').height();
|
|
}
|
|
|
|
// 获取点击的href
|
|
let domhref = '';
|
|
let domImgSrc = '';
|
|
let globalEvent = null;
|
|
|
|
// 监听右键初始化
|
|
window.oncontextmenu = function(event) {
|
|
if (document.body.clientWidth > 768) {
|
|
let pageX = event.clientX + 10; //加10是为了防止显示时鼠标遮在菜单上
|
|
let pageY = event.clientY;
|
|
// console.log(event);
|
|
|
|
//其他额外菜单
|
|
let $rightMenuOther = $('.rightMenuOther');
|
|
let $rightMenuPlugin = $('.rightMenuPlugin');
|
|
let $rightMenuCopyText = $('#menu-copytext');
|
|
let $rightMenuPasteText = $('#menu-pastetext');
|
|
let $rightMenuCommentText = $('#menu-commenttext');
|
|
let $rightMenuNewWindow = $('#menu-newwindow');
|
|
let $rightMenuNewWindowImg = $('#menu-newwindowimg');
|
|
let $rightMenuCopyLink = $('#menu-copylink');
|
|
let $rightMenuCopyImg = $('#menu-copyimg');
|
|
let $rightMenuDownloadImg = $('#menu-downloadimg');
|
|
let $rightMenuSearch = $('#menu-search');
|
|
let $rightMenuSearchBaidu = $('#menu-searchBaidu');
|
|
let $rightMenuMusicToggle = $('#menu-music-toggle');
|
|
let $rightMenuMusicBack = $('#menu-music-back');
|
|
let $rightMenuMusicForward = $('#menu-music-forward');
|
|
let $rightMenuMusicPlaylist = $('#menu-music-playlist');
|
|
let $rightMenuMusicCopyMusicName = $('#menu-music-copyMusicName');
|
|
let href = event.target.href;
|
|
let imgsrc = event.target.currentSrc;
|
|
|
|
// 判断模式 扩展模式为有事件
|
|
let pluginMode = false;
|
|
$rightMenuOther.show();
|
|
globalEvent = event;
|
|
|
|
// 检查是否需要复制 是否有选中文本
|
|
if (selectTextNow && window.getSelection()) {
|
|
pluginMode = true;
|
|
$rightMenuCopyText.show();
|
|
$rightMenuCommentText.show();
|
|
$rightMenuSearch.show();
|
|
$rightMenuSearchBaidu.show();
|
|
} else {
|
|
$rightMenuCopyText.hide();
|
|
$rightMenuCommentText.hide();
|
|
$rightMenuSearchBaidu.hide();
|
|
$rightMenuSearch.hide();
|
|
}
|
|
|
|
//检查是否右键点击了链接a标签
|
|
if (href) {
|
|
pluginMode = true;
|
|
$rightMenuNewWindow.show();
|
|
$rightMenuCopyLink.show();
|
|
domhref = href;
|
|
} else {
|
|
$rightMenuNewWindow.hide();
|
|
$rightMenuCopyLink.hide();
|
|
}
|
|
|
|
//检查是否需要复制图片
|
|
if (imgsrc) {
|
|
pluginMode = true;
|
|
$rightMenuCopyImg.show();
|
|
$rightMenuDownloadImg.show();
|
|
$rightMenuNewWindowImg.show();
|
|
domImgSrc = imgsrc;
|
|
} else {
|
|
$rightMenuCopyImg.hide();
|
|
$rightMenuDownloadImg.hide();
|
|
$rightMenuNewWindowImg.hide();
|
|
}
|
|
|
|
// 判断是否为输入框
|
|
if (event.target.tagName.toLowerCase() === 'input' || event.target.tagName.toLowerCase() === 'textarea') {
|
|
console.log('这是一个输入框')
|
|
pluginMode = true;
|
|
$rightMenuPasteText.show();
|
|
} else {
|
|
$rightMenuPasteText.hide();
|
|
}
|
|
|
|
//判断是否是音乐
|
|
const navMusicEl = document.querySelector("#nav-music");
|
|
if (navMusicEl && navMusicEl.contains(event.target)) {
|
|
pluginMode = true;
|
|
$rightMenuMusicToggle.show();
|
|
$rightMenuMusicBack.show();
|
|
$rightMenuMusicForward.show();
|
|
$rightMenuMusicPlaylist.show();
|
|
$rightMenuMusicCopyMusicName.show();
|
|
} else {
|
|
$rightMenuMusicToggle.hide();
|
|
$rightMenuMusicBack.hide();
|
|
$rightMenuMusicForward.hide();
|
|
$rightMenuMusicPlaylist.hide();
|
|
$rightMenuMusicCopyMusicName.hide()
|
|
}
|
|
|
|
// 如果不是扩展模式则隐藏扩展模块
|
|
if (pluginMode) {
|
|
$rightMenuOther.hide();
|
|
$rightMenuPlugin.show();
|
|
} else {
|
|
$rightMenuPlugin.hide()
|
|
}
|
|
|
|
rm.reloadrmSize()
|
|
|
|
// 鼠标默认显示在鼠标右下方,当鼠标靠右或考下时,将菜单显示在鼠标左方\上方
|
|
if (pageX + rmWidth > window.innerWidth) {
|
|
pageX -= rmWidth + 10;
|
|
}
|
|
if (pageY + rmHeight > window.innerHeight) {
|
|
pageY -= pageY + rmHeight - window.innerHeight;
|
|
}
|
|
|
|
rm.showRightMenu(true, pageY, pageX);
|
|
$('#rightmenu-mask').attr('style', 'display: flex');
|
|
return false;
|
|
}
|
|
};
|
|
|
|
// 下载图片状态
|
|
rm.downloadimging = false;
|
|
|
|
// 复制图片到剪贴板
|
|
rm.writeClipImg = function(imgsrc) {
|
|
console.log('按下复制');
|
|
rm.hideRightMenu();
|
|
btf.snackbarShow('正在下载中,请稍后', false, 10000)
|
|
if (rm.downloadimging == false) {
|
|
rm.downloadimging = true;
|
|
setTimeout(function() {
|
|
copyImage(imgsrc);
|
|
btf.snackbarShow('复制成功!图片已添加盲水印,请遵守版权协议');
|
|
rm.downloadimging = false;
|
|
}, "10000")
|
|
}
|
|
}
|
|
|
|
function imageToBlob(imageURL) {
|
|
const img = new Image;
|
|
const c = document.createElement("canvas");
|
|
const ctx = c.getContext("2d");
|
|
img.crossOrigin = "";
|
|
img.src = imageURL;
|
|
return new Promise(resolve => {
|
|
img.onload = function() {
|
|
c.width = this.naturalWidth;
|
|
c.height = this.naturalHeight;
|
|
ctx.drawImage(this, 0, 0);
|
|
c.toBlob((blob) => {
|
|
// here the image is a blob
|
|
resolve(blob)
|
|
}, "image/png", 0.75);
|
|
};
|
|
})
|
|
}
|
|
|
|
async function copyImage(imageURL) {
|
|
const blob = await imageToBlob(imageURL)
|
|
const item = new ClipboardItem({
|
|
"image/png": blob
|
|
});
|
|
navigator.clipboard.write([item]);
|
|
}
|
|
|
|
rm.switchDarkMode = function() {
|
|
navFn.switchDarkMode();
|
|
rm.hideRightMenu();
|
|
|
|
//halo.darkComment();
|
|
}
|
|
|
|
rm.copyUrl = function(id) {
|
|
$("body").after("<input id='copyVal'></input>");
|
|
var text = id;
|
|
var input = document.getElementById("copyVal");
|
|
input.value = text;
|
|
input.select();
|
|
input.setSelectionRange(0, input.value.length);
|
|
document.execCommand("copy");
|
|
$("#copyVal").remove();
|
|
}
|
|
|
|
function stopMaskScroll() {
|
|
if (document.getElementById("rightmenu-mask")) {
|
|
let xscroll = document.getElementById("rightmenu-mask");
|
|
xscroll.addEventListener("mousewheel", function(e) {
|
|
//阻止浏览器默认方法
|
|
rm.hideRightMenu();
|
|
// e.preventDefault();
|
|
}, false);
|
|
}
|
|
if (document.getElementById("rightMenu")) {
|
|
let xscroll = document.getElementById("rightMenu");
|
|
xscroll.addEventListener("mousewheel", function(e) {
|
|
//阻止浏览器默认方法
|
|
rm.hideRightMenu();
|
|
// e.preventDefault();
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
rm.rightmenuCopyText = function(txt) {
|
|
if (navigator.clipboard) {
|
|
navigator.clipboard.writeText(txt);
|
|
}
|
|
rm.hideRightMenu();
|
|
}
|
|
|
|
rm.copyPageUrl = function() {
|
|
var url = window.location.href;
|
|
rm.copyUrl(url);
|
|
btf.snackbarShow('复制本页链接地址成功', false, 2000);
|
|
rm.hideRightMenu();
|
|
}
|
|
|
|
rm.sharePage = function() {
|
|
var content = window.location.href;
|
|
rm.copyUrl(url);
|
|
btf.snackbarShow('复制本页链接地址成功', false, 2000);
|
|
rm.hideRightMenu();
|
|
}
|
|
|
|
// 复制当前选中文本
|
|
var selectTextNow = '';
|
|
document.onmouseup = document.ondbclick = selceText;
|
|
|
|
function selceText() {
|
|
var txt;
|
|
if (document.selection) {
|
|
txt = document.selection.createRange().text;
|
|
} else {
|
|
txt = window.getSelection() + '';
|
|
}
|
|
if (txt) {
|
|
selectTextNow = txt;
|
|
// console.log(selectTextNow);
|
|
} else {
|
|
selectTextNow = '';
|
|
}
|
|
}
|
|
|
|
// 读取剪切板
|
|
rm.readClipboard = function() {
|
|
if (navigator.clipboard) {
|
|
navigator.clipboard.readText().then(clipText => rm.insertAtCaret(globalEvent.target, clipText));
|
|
}
|
|
}
|
|
|
|
// 粘贴文本到焦点
|
|
rm.insertAtCaret = function(elemt, value) {
|
|
const startPos = elemt.selectionStart,
|
|
endPos = elemt.selectionEnd;
|
|
if (document.selection) {
|
|
elemt.focus();
|
|
var sel = document.selection.createRange();
|
|
sel.text = value;
|
|
elemt.focus();
|
|
} else {
|
|
if (startPos || startPos == '0') {
|
|
var scrollTop = elemt.scrollTop;
|
|
elemt.value = elemt.value.substring(0, startPos) + value + elemt.value.substring(endPos, elemt.value
|
|
.length);
|
|
elemt.focus();
|
|
elemt.selectionStart = startPos + value.length;
|
|
elemt.selectionEnd = startPos + value.length;
|
|
elemt.scrollTop = scrollTop;
|
|
} else {
|
|
elemt.value += value;
|
|
elemt.focus();
|
|
}
|
|
}
|
|
}
|
|
|
|
//粘贴文本
|
|
rm.pasteText = function() {
|
|
const result = rm.readClipboard() || '';
|
|
rm.hideRightMenu();
|
|
}
|
|
|
|
//引用到评论
|
|
rm.rightMenuCommentText = function(txt) {
|
|
rm.hideRightMenu();
|
|
var input = document.getElementsByClassName(GLOBAL_CONFIG.source.comments.textarea)[0];
|
|
let evt = document.createEvent('HTMLEvents');
|
|
evt.initEvent('input', true, true);
|
|
let inputValue = replaceAll(txt, '\n', '\n> ')
|
|
input.value = '> ' + inputValue + '\n\n';
|
|
input.dispatchEvent(evt);
|
|
var domTop = document.querySelector("#post-comment").offsetTop;
|
|
window.scrollTo(0, domTop - 80);
|
|
input.focus();
|
|
input.setSelectionRange(-1, -1);
|
|
if (document.getElementById("comment-tips")) {
|
|
document.getElementById("comment-tips").classList.add("show");
|
|
}
|
|
}
|
|
|
|
//替换所有内容
|
|
function replaceAll(string, search, replace) {
|
|
return string.split(search).join(replace);
|
|
}
|
|
|
|
// 百度搜索
|
|
rm.searchBaidu = function() {
|
|
btf.snackbarShow('即将跳转到百度搜索', false, 2000);
|
|
setTimeout(function() {
|
|
window.open('https://www.baidu.com/s?wd=' + selectTextNow);
|
|
}, "2000");
|
|
rm.hideRightMenu();
|
|
}
|
|
|
|
//分享链接
|
|
rm.copyLink = function() {
|
|
rm.rightmenuCopyText(domhref);
|
|
btf.snackbarShow('已复制链接地址');
|
|
}
|
|
|
|
function addRightMenuClickEvent() {
|
|
// 添加点击事件
|
|
$('#menu-backward').on('click', function() {
|
|
window.history.back();
|
|
rm.hideRightMenu();
|
|
});
|
|
$('#menu-forward').on('click', function() {
|
|
window.history.forward();
|
|
rm.hideRightMenu();
|
|
});
|
|
$('#menu-refresh').on('click', function() {
|
|
window.location.reload();
|
|
});
|
|
$('#menu-top').on('click', function() {
|
|
btf.scrollToDest(0, 500);
|
|
rm.hideRightMenu();
|
|
});
|
|
$('.menu-link').on('click', rm.hideRightMenu);
|
|
$('#menu-darkmode').on('click', rm.switchDarkMode);
|
|
$('#menu-home').on('click', function() {
|
|
window.location.href = window.location.origin;
|
|
});
|
|
$('#menu-randomPost').on('click', function() {
|
|
toRandomPost()
|
|
});
|
|
$('#menu-commentBarrage').on('click', heo.switchCommentBarrage);
|
|
$('#rightmenu-mask').on('click', rm.hideRightMenu);
|
|
$('#rightmenu-mask').contextmenu(function() {
|
|
rm.hideRightMenu();
|
|
return false;
|
|
});
|
|
$('#menu-translate').on('click', function() {
|
|
rm.hideRightMenu();
|
|
});
|
|
$('#menu-copy').on('click', rm.copyPageUrl);
|
|
$('#menu-pastetext').on('click', rm.pasteText);
|
|
$('#menu-copytext').on('click', function() {
|
|
rm.rightmenuCopyText(selectTextNow);
|
|
btf.snackbarShow('复制成功,复制和转载请标注本文地址');
|
|
});
|
|
$('#menu-commenttext').on('click', function() {
|
|
rm.rightMenuCommentText(selectTextNow);
|
|
});
|
|
$('#menu-newwindow').on('click', function() {
|
|
window.open(domhref);
|
|
rm.hideRightMenu();
|
|
});
|
|
$('#menu-copylink').on('click', rm.copyLink);
|
|
$('#menu-downloadimg').on('click', function() {
|
|
heo.downloadImage(domImgSrc, 'hao');
|
|
});
|
|
$('#menu-newwindowimg').on('click', function() {
|
|
window.open(domImgSrc, "_blank");
|
|
rm.hideRightMenu();
|
|
});
|
|
$('#menu-copyimg').on('click', function() {
|
|
rm.writeClipImg(domImgSrc);
|
|
});
|
|
$('#menu-searchBaidu').on('click', rm.searchBaidu);
|
|
//音乐
|
|
$('#menu-music-toggle').on('click', heo.musicToggle);
|
|
$('#menu-music-back').on('click', heo.musicSkipBack);
|
|
$('#menu-music-forward').on('click', heo.musicSkipForward);
|
|
$('#menu-music-copyMusicName').on('click', function() {
|
|
rm.rightmenuCopyText(heo.musicGetName());
|
|
btf.snackbarShow('复制歌曲名称成功', false, 3000);
|
|
});
|
|
} |