js結(jié)合css實(shí)現(xiàn)登錄后才能復(fù)制的效果實(shí)例
很多網(wǎng)站都有登錄后才能復(fù)制的限制,什么原理呢。?設(shè)置css屬性user-select:none,此時(shí)鼠標(biāo)無法實(shí)現(xiàn)選中文本,也就無法復(fù)制文本,通常會采用這種方式來禁止復(fù)制文本。但瀏覽開發(fā)者工具-審查元素,取消此樣式后,就可以選中文本了。想要完整地禁止復(fù)制,還需要通過js控制選擇的內(nèi)容。
user-select:none
該屬性用來控制用戶能否選中文本。其對應(yīng)常用的值:
none:元素及其子元素的文本不可選中。
auto:具體取值取決于一系列條件,具體如下:* 在 ::before 和 ::after 偽元素上,采用的屬性值是 none* 如果元素是可編輯元素,則采用的屬性值是 contain* 否則,如果此元素的父元素的 user-select 采用的屬性值為 all,則該元素采用的屬性值也為 all* 否則,如果此元素的父元素的 user-select 采用的屬性值為 none,則該元素采用的屬性值也為 none* 否則,采用的屬性值為 text
text:用戶可以選中文本。
all:當(dāng)單擊文本時(shí),會選中這一行文本。
-webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none;
jquery禁用
禁用復(fù)制、粘貼、剪切
$(document).on("cut copy paste", function(e) {
e.preventDefault();
});禁用右鍵
$(document).on("contextmenu", function(e) {
e.preventDefault();
});上述的代碼只是阻止了瀏覽器自帶的操作。如果用戶想要復(fù)制、粘貼和剪切網(wǎng)頁中的文本,依然可以通過瀏覽器菜單或使用快捷鍵來執(zhí)行。
js屏蔽選中指定內(nèi)容
window.addEventListener('copy',function(){
const selection = window.getSelection();
const copyNode = selection.getRangeAt(0).cloneContents();
});
const div = document.createElement('div');
div.appendChild(copyNode);
// 通過getComputedStyle獲取style值,需要將節(jié)點(diǎn)掛載到dom樹上,因此append到body
document.body.appendChild(div);
const nodelist = div.childNodes;
for (let i = 0; i < nodelist.length; i++) {
const curnode = nodelist[i];
const nodeType = curnode.nodeType;
// 將節(jié)點(diǎn)類型為元素節(jié)點(diǎn),并且設(shè)置了user-select:none的節(jié)點(diǎn)從復(fù)制的內(nèi)容中過濾掉
if (nodeType === 1 && window.getComputedStyle(curnode).userSelect === 'none') {div.removeChild(curnode);}
}
// 獲取過濾后的數(shù)據(jù)
const cpt = div.innerHTML;
selection.select(cpt);
document.execCommand('copy');
//復(fù)制到剪切板結(jié)論
到此這篇關(guān)于js結(jié)合css實(shí)現(xiàn)登錄后才能復(fù)制的效果實(shí)例的文章就介紹到這了,更多相關(guān)js+css實(shí)現(xiàn)登錄后才能復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS中for,for...in,for...of和forEach的區(qū)別和用法實(shí)例
JS遍歷數(shù)組(循環(huán)數(shù)組)的方式有多種,可以使用傳統(tǒng)的for循環(huán),也可以使用升級版的for in循環(huán),還可以使用Array類型的forEach() 方法,這篇文章主要給大家介紹了關(guān)于JS中for、for...in、for...of和forEach的區(qū)別和用法的相關(guān)資料,需要的朋友可以參考下2021-11-11
Sample script that deletes a SQL Server database
Sample script that deletes a SQL Server database...2007-06-06
javascript中關(guān)于&& 和 || 表達(dá)式的小技巧分享
我將會介紹和解析12個(gè)簡單但是強(qiáng)大的JavaScript技巧. 這些技巧所有的JavaScript程序員都可以馬上使用, 你不需要成為JavaScript高手才能理解這些.下面我們開始本系列的第一篇文章,介紹下強(qiáng)大的&& 和 || 表達(dá)式2015-04-04

