// 初始化函数 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(""); 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); }); }