欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript 網(wǎng)頁水印(非圖片水印)實(shí)現(xiàn)代碼

 更新時(shí)間:2010年03月01日 18:17:21   作者:  
在一些B/S結(jié)構(gòu)的應(yīng)用系統(tǒng)中,有很多頁面是需要有水印的。常見的就是公文系統(tǒng)、合同系統(tǒng)等。
1 概述
1.1 定義
在一些B/S結(jié)構(gòu)的應(yīng)用系統(tǒng)中,有很多頁面是需要有水印的。常見的就是公文系統(tǒng)、合同系統(tǒng)等。大家常常關(guān)注的是網(wǎng)站圖片增加水印,而很少關(guān)注頁面水印。剛?cè)oogle了一圈,關(guān)于頁面水印的文章的數(shù)量為幾乎為0. 本文中,流牛木馬就與大家一起交流一下有關(guān)制作網(wǎng)頁水印的心得。
本文討論以下的情形: 新增水印的方法需要用Javascript完成,并要求能夠方便地加入到原有的頁面中,不能影響到已有的功能。
1.2 預(yù)期目標(biāo)
就圖片水印實(shí)現(xiàn)方案來說,我們預(yù)期至少包括以下幾個(gè)目標(biāo):
1. 實(shí)現(xiàn)懸浮、半透明的圖片水印
2. 包含水印的頁面,所有元素均為只讀(不可寫)
3. 在包含框架頁面中,可以控制任意一個(gè)子頁面或父頁面的水印生成
4. 在頁面放大、縮小(resize過程)后,需要在保證頁面不刷新的前提下,重新生成適應(yīng)頁面大小的新水印,以保證所有內(nèi)容都被水印覆蓋,并且不會(huì)因水印圖片范圍過大而產(chǎn)生滾動(dòng)條。
5. 支持IE6\7\8瀏覽器。暫不考慮其他瀏覽器。
1.3 效果圖
加密前:
clip_image002 

加密后:

clip_image004
可以打開附件里的文件進(jìn)行查看。
2 實(shí)現(xiàn)步驟
2.1 基本構(gòu)思
加密的過程是一個(gè)Javascript函數(shù)執(zhí)行過程,所以我們首先應(yīng)該考慮用Javascript操作DOM對象的方式。
在已有的HTML頁面中,新建一個(gè)DOM對象在Body節(jié)點(diǎn)下。該對象的長、寬均經(jīng)過計(jì)算,保證在覆蓋全部頁面內(nèi)容的同時(shí)又不產(chǎn)生滾動(dòng)條。將該對象覆蓋到原有的頁面之上,設(shè)置背景圖,并設(shè)置為透明。
創(chuàng)建新DOM元素:
使用document對象里的createElement方法。創(chuàng)建元素后,設(shè)置它的z-index為一個(gè)大整數(shù),保證它能夠比已有網(wǎng)頁的最大z-index大,才能完成“覆蓋”。
計(jì)算新對象大?。?
利用三個(gè)DOM對象值: clientWidth 、scrollHeight與clientHeight.
網(wǎng)頁中一般不會(huì)出現(xiàn)橫向滾動(dòng)條,故不使用scrollWidth.
而縱向的滾動(dòng)條就很常見了。
為了保證頁面內(nèi)容全部覆蓋,在未出現(xiàn)滾動(dòng)條的時(shí)候,使用clientHeight,出現(xiàn)滾動(dòng)條后,則使用scrollHeight。
設(shè)置透明:
利用Alpha值。Alpha是IE支持的css filter。
2.2 應(yīng)變細(xì)節(jié)
有一個(gè)小細(xì)節(jié)是很有意思的,前文也提過了,就是resize的過程。
試想,當(dāng)一個(gè)頁面打開的時(shí)候是550px×400px,那么自然會(huì)生成550px×400px大小的水印。但當(dāng)用戶對它進(jìn)行最大化時(shí),頁面沒有刷新,不會(huì)重新執(zhí)行生成水印的函數(shù),那么以前生產(chǎn)的水印圖片就太小了。
如下圖所示的情況。請注意,它的右側(cè)、下側(cè)都是沒有水印的。
clip_image006 
為了應(yīng)對這種情況,我們就需要對body的onresize()函數(shù)進(jìn)行處理。如果以前定義沒有onresize()函數(shù),則直接添加onresize();如果以前有onresize()函數(shù),則對之進(jìn)行修改。
2.3 最終代碼
考慮到框架頁面需要考慮的情況,該方法包括三個(gè)參數(shù): 目標(biāo)頁面對象、目標(biāo)頁面字符串、 背景圖片。

復(fù)制代碼 代碼如下:

function GetWaterMarked(targetObj,jpgUrl,targetStr ) {
var windowobj=targetObj;
var waterMarkPicUrl=jpgUrl;
var controlWindowStr=targetStr;
if(windowobj.document.getElementById("waterMark") != null)
return;
var m = "waterMark";
var newMark = windowobj.document.createElement("div");
newMark.id = m;
newMark.style.position = "absolute";
newMark.style.zIndex = "9527";
newMark.style.top = "0px";
newMark.style.left = "0px";
newMark.style.width = windowobj.document.body.clientWidth;
if( parseInt(windowobj.document.body.scrollHeight) > parseInt(windowobj.document.body.clientHeight) )
{
newMark.style.height = windowobj.document.body.scrollHeight;
}else
{
newMark.style.height = windowobj.document.body.clientHeight;
}
newMark.style.backgroundImage = "url("+ waterMarkPicUrl +")";
newMark.style.filter = "alpha(opacity=50)";
windowobj.document.body.appendChild(newMark);
var markStr = "var sobj ="+controlWindowStr+".document.getElementById('waterMark');sobj.style.width ="+controlWindowStr+".document.body.clientWidth;sobj.style.height ="+controlWindowStr+".document.body.clientHeight;";
if(windowobj.document.body.onresize != null)
{
var oldResiae = windowobj.document.body.onresize.toString();
var oldResiaeStr = oldResiae.substr(oldResiae.indexOf("{")+1);
var oldResiaeStr= oldResiaeStr.substr(0,oldResiaeStr.lastIndexOf("}"));
oldResiaeStr+=";"+markStr;
windowobj.document.body.onresize = new Function(oldResiaeStr);
}
else
{
windowobj.document.body.onresize = new Function(markStr);
}
}

3 原有頁面處理
需要在原有的<body>標(biāo)簽處加入一個(gè)onload方法。如:
<body onload="GetWaterMarked(window,'watermark.jpg','this')">
4 附件
演示地址 http://demo.jb51.net/js/js_wartermark/baidu_mark.htm
附件下載
http://xiazai.jb51.net/201003/yuanma/js_wartermark.rar

相關(guān)文章

  • JavaScript知識點(diǎn)總結(jié)之如何提高性能

    JavaScript知識點(diǎn)總結(jié)之如何提高性能

    JavaScript的性能問題不容小覷,這就需要我們開發(fā)人員在編寫JavaScript程序時(shí)多注意一些細(xì)節(jié),本文非常詳細(xì)的介紹了一下JavaScript性能優(yōu)化方面的知識點(diǎn),絕對是干貨,需要的朋友快來一起學(xué)習(xí)吧
    2016-01-01
  • JavaScript 驗(yàn)證碼的實(shí)例代碼(附效果圖)

    JavaScript 驗(yàn)證碼的實(shí)例代碼(附效果圖)

    JavaScript 驗(yàn)證碼的實(shí)例代碼(附效果圖),需要的朋友可以參考一下
    2013-03-03
  • JavaScript中Object.values()的用法舉例

    JavaScript中Object.values()的用法舉例

    這篇文章主要給大家介紹了關(guān)于JavaScript中Object.values()的用法舉例,Object.values()是JavaScript中一個(gè)內(nèi)置的靜態(tài)函數(shù),用于返回一個(gè)對象中所有屬性值的數(shù)組,需要的朋友可以參考下
    2023-09-09
  • UNiAPP中如何使用render.js繪制高德地圖

    UNiAPP中如何使用render.js繪制高德地圖

    這篇文章主要介紹了UNiAPP中如何使用render.js繪制高德地圖,renderjs是一個(gè)運(yùn)行在視圖層的js。它比WXS更加強(qiáng)大。它只支持app-vue和h5,文中給大家提到了renderjs的主要作用,需要的朋友可以參考下
    2022-05-05
  • javascript設(shè)計(jì)模式 – 簡單工廠模式原理與應(yīng)用實(shí)例分析

    javascript設(shè)計(jì)模式 – 簡單工廠模式原理與應(yīng)用實(shí)例分析

    這篇文章主要介紹了javascript設(shè)計(jì)模式 – 簡單工廠模式,結(jié)合實(shí)例形式分析了javascript簡單工廠模式基本概念、原理、定義、應(yīng)用場景及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • 解決layer.prompt無效的問題

    解決layer.prompt無效的問題

    今天小編就為大家分享一篇解決layer.prompt無效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 深入了解JavaScript中的函數(shù)式編程

    深入了解JavaScript中的函數(shù)式編程

    JavaScript是一門多范式的編程語言,其中函數(shù)式編程成為了一種受歡迎的范式之一,本文將帶您深入了解JavaScript函數(shù)式編程的核心概念和技術(shù),需要的可以參考一下
    2023-06-06
  • 淺述Javascript的外部對象

    淺述Javascript的外部對象

    本文主要對Javascript的外部對象進(jìn)行介紹,列舉了具體實(shí)例。便于理解。有需要的朋友可以看下
    2016-12-12
  • JavaScript限定范圍拖拽及自定義滾動(dòng)條應(yīng)用(3)

    JavaScript限定范圍拖拽及自定義滾動(dòng)條應(yīng)用(3)

    這篇文章主要介紹了JavaScript限定范圍拖拽及自定義滾動(dòng)條應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式詳解

    ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式詳解

    為了方便使用,echarts的餅圖中給加入了默認(rèn)的hover高亮效果,下面這篇文章主要給大家介紹了關(guān)于ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評論