JS结合CSS实现登录后才能复制的效果实例

作者:交互手记

时间:2026-10-30

浏览:264

本文详解如何利用CSS属性user-select:none结合JavaScript事件监听,实现网页内容仅在用户登录后可复制的功能。通过禁用默认选中、拦截快捷键及处理DOM节点样式,完整演示了从基础CSS设置到JS深度控制的实现逻辑与代码示例。

文章目录

许多网站采用限制复制的策略,其核心原理涉及CSS与JavaScript的配合。首先,通过设置CSS属性user-select为none,可以阻止鼠标选中文本,从而禁止常规复制操作。然而,用户仍可通过浏览器开发者工具审查元素并移除该样式来绕过限制。因此,要实现完整的复制控制,必须结合JavaScript对选中内容进行进一步处理。

CSS属性user-select详解

该属性用于控制用户是否可以选择文本,常用取值包括:

none:元素及其子元素的文本不可被选中。auto:取值取决于多个条件,具体包括:在::before和::after伪元素上采用none;若元素为可编辑元素,则采用contain;若父元素的user-select为all,则该元素也为all;若父元素为none,则该元素也为none;否则默认为text。text:允许用户选中文本。all:单击文本时选中整行。

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;

jQuery禁用相关操作

禁用复制、粘贴和剪切功能

$(document).on("cut copy paste", function(e) {
        e.preventDefault();
});

禁用右键菜单

$(document).on("contextmenu", function(e) {
    e.preventDefault();
});

上述代码仅阻止了浏览器默认的操作行为。如果用户试图通过浏览器菜单或快捷键执行复制、粘贴和剪切,这些限制将失效。

JavaScript屏蔽指定内容的选中

window.addEventListener('copy',function(){
	const selection = window.getSelection();
	const copyNode = selection.getRangeAt(0).cloneContents();
}); 
const div = document.createElement('div');
div.appendChild(copyNode);
// 通过getComputedStyle获取style值,需要将节点挂载到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;
	// 将节点类型为元素节点,并且设置了user-select:none的节点从复制的内容中过滤掉
	if (nodeType === 1 && window.getComputedStyle(curnode).userSelect === 'none') {div.removeChild(curnode);}
}
// 获取过滤后的数据
const cpt = div.innerHTML; 
selection.select(cpt); 
document.execCommand('copy');
//复制到剪切板

总结

至此,关于利用JS结合CSS实现登录后才能复制的效果实例介绍完毕。如需了解更多相关JS与CSS实现复制控制的内容,请搜索本站历史文章或继续阅读后续相关文章。感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章