js用层实现为图片添加水印效果
在探讨如何利用JavaScript(简称JS)为图片添加水印效果时,我们首先需要理解几个核心概念:HTML元素定位、层叠上下文以及DOM操作。在上述代码片段中,作者通过创建绝对定位的`<div>`元素(即层),并将其放置在目标图片之上,实现了水印效果。 ### 1. HTML元素定位与层叠上下文 在网页布局中,元素的定位方式决定了它们在页面中的位置。常用的定位属性包括`static`、`relative`、`absolute`和`fixed`。其中,`absolute`定位最为关键,因为它允许元素相对于最近的非`static`定位的祖先元素进行偏移,这正是实现水印效果的基础。 层叠上下文是指在CSS渲染过程中,决定元素堆叠顺序的规则集。当一个元素设置了`z-index`属性,并且其`position`属性为`relative`、`absolute`或`fixed`时,该元素就形成了一个新的层叠上下文,这使得我们可以精确控制页面元素的前后层次关系,确保水印始终位于图片之上。 ### 2. DOM操作与动态创建元素 在JavaScript中,文档对象模型(DOM)是表示和交互HTML或XML文档的API。通过DOM,我们可以在运行时读取、修改和操作页面结构。在本例中,`createLayer()`函数通过`document.writeln()`方法动态生成了`<div>`元素,并将其插入到文档流中,以此作为水印的容器。 此外,`getDim()`函数用于获取目标图片的位置信息,这对于正确放置水印至关重要。它通过遍历DOM树,累加每个元素的`offsetLeft`和`offsetTop`属性值来计算出图片在页面上的实际坐标。 ### 3. 跨浏览器兼容性与代码优化 值得注意的是,尽管这段代码可以基本实现预期功能,但在现代Web开发中,使用`document.writeln()`来动态生成HTML元素并不被推荐,因为它会重新解析整个文档,可能导致页面闪烁或性能下降。更优雅的做法是使用`createElement()`和`appendChild()`等DOM API,这样不仅能够提高代码的可读性和维护性,还能增强跨浏览器的兼容性。 ### 4. 性能考虑与最佳实践 在为图片添加水印时,还需要考虑性能和用户体验。例如,如果页面中有大量图片,频繁地创建和定位层可能会导致性能瓶颈。因此,在实际应用中,可以考虑将所有水印合并到一张大图中,再通过CSS背景图的方式应用到页面上,这样可以减少HTTP请求次数,提升加载速度。 此外,对于响应式设计,代码中的`window.onresize`事件监听器可以确保在窗口大小改变时重新计算水印位置,但这也可能带来不必要的重绘和重排成本。一种更高效的方法是在CSS中使用媒体查询和百分比单位,使水印自动适应不同设备和屏幕尺寸。 利用JS为图片添加水印效果是一个涉及HTML、CSS和JavaScript多个方面的综合技能。在实践中,开发者需要不断优化代码,兼顾功能实现、性能优化和用户体验,才能达到最佳的效果。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JS用层实现为图片添加水印效果</title>
<script>
//取得元素(图像)的绝对位置函数
function getDim(el)
{
for (var lx=0,ly=0; el!=null; lx+=el.offsetLeft,ly+=el.offsetTop,el=el.offsetParent);
return {x:lx,y:ly}
}
//创建遮挡层函数
function createLayer(el)
{
myImgDim = getDim(el);
document.writeln("<div id='Layer1' style='position:absolute; z-index:1; left: "+myImgDim.x+"px; top: "+myImgDim.y+"px;'>");
document.writeln("水印");
document.writeln("</div>");
}
//浏览器窗口大小改变时刷新页面
window.onresize=function()
{
location.reload();
}
</script>
<link href="j.css" rel="stylesheet" type="text/css">
</head>
<body>
- qinfeng198891662013-06-09不错的代码
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助