PS系統(tǒng)頁(yè)面水印解決方案

目的

實(shí)現(xiàn)PS系統(tǒng)頁(yè)面水印的需求鉴逞,提升系統(tǒng)的信息保密性记某。

實(shí)現(xiàn)原理

通過(guò)canvas繪制水印,將水印作為蒙層覆蓋頁(yè)面构捡。

實(shí)現(xiàn)步驟

  1. 在Application Designer中創(chuàng)建HTML對(duì)象液南,將watermark.js中代碼寫(xiě)入;

  2. 在PeopleTools/門(mén)戶(hù)網(wǎng)站/品牌化/品牌化系統(tǒng)選項(xiàng)中勾徽,添加JavaScript對(duì)象滑凉,即上一步創(chuàng)建的HTML對(duì)象;

水印效果

img.png

watermark.js內(nèi)容

/**
 * @description 水印
 * @author LeaFish <735683662@qq.com>
 * @date 2019-03-13
 * @param {string} [id="watermark"] 水印元素ID
 * @param {number} [height=80] 單個(gè)水印塊高度
 * @param {number} [width=150] 單個(gè)水印塊寬度
 * @param {string} [text] 水印文本
 * @param {number} [fontSize=13] 文本字體大小
 * @param {string} [color="rgba(100,100,100,0.2)"] 文本顏色
 * @param {string} [displayMethod] 展現(xiàn)方式:background 背景圖(采用repeat特性) canvas 畫(huà)布(采用畫(huà)布方式喘帚,建議isOnResize=true)
 * @param {boolean} [isOnResize=false] 是否監(jiān)聽(tīng)瀏覽器窗口變化畅姊,重繪水印
 */
function Watermark(options) {
  options = options || {};
  this.id = options.id || "watermark";
  this.canvas = document.createElement("canvas");
  this.ctx = this.canvas.getContext("2d");
  this.height = options.height || 80;
  this.width = options.width || 150; // 控制水印的間隙大小
  this.text = options.text || "";
  this.fontSize = options.fontSize || 13;
  this.color = options.color || "rgba(100,100,100,0.2)";
  this.displayMethod = options.displayMethod || "background";
  this.isOnResize = options.isOnResize || false;

  // 獲取設(shè)備像素比
  this.PIXEL_RATIO = (function () {
    var dpr = window.devicePixelRatio || 1;
    var bsr = this.ctx.webkitBackingStorePixelRatio ||
      this.ctx.mozBackingStorePixelRatio ||
      this.ctx.msBackingStorePixelRatio ||
      this.ctx.oBackingStorePixelRatio ||
      this.ctx.backingStorePixelRatio || 1;
    return dpr / bsr;
  }.bind(this))();

  /**
   * @description 初始化執(zhí)行函數(shù)
   * @author LeaFish <735683662@qq.com>
   * @date 2019-03-13
   */
  this.init = function () {
    this.draw();
    this.addToBody();

    this.isOnResize && (window.onresize = function () {
      this.draw();
      this.displayMethod === "canvas" || this.addToBody();
    }.bind(this));
  }

  /**
   * @description 繪制水印
   * @author LeaFish <735683662@qq.com>
   * @date 2019-03-13
   */
  this.draw = function () {
    var canvasWidth = window.innerWidth;
    var canvasHeight = window.innerHeight * 2;

    // 適配高清屏,canvas內(nèi)容的寬高是實(shí)際的寬高的PIXEL_RATIO倍
    this.canvas.width = canvasWidth * this.PIXEL_RATIO;
    this.canvas.height = canvasHeight * this.PIXEL_RATIO;
    this.canvas.style.width = canvasWidth + "px";
    this.canvas.style.height = canvasHeight + "px";
    // 縮放繪圖
    this.ctx.setTransform(this.PIXEL_RATIO, 0, 0, this.PIXEL_RATIO, 0, 0);

    this.ctx.font = this.fontSize + "px 黑體";
    this.ctx.rotate(-20 * Math.PI / 180);
    this.ctx.fillStyle = this.color;

    // 繪制文字
    for (var y = 1; y < window.innerHeight * 2 / this.height + 1; y++) {
      for (var x = 1; x < window.innerWidth * 2 / this.width; x++) {
        this.ctx.fillText(this.text, (y % 2 ? 0 : this.width / 2) + x * this.width - window.innerWidth, y * this.height);
      }
    }
  };

  /**
   * @description 將水印添加到body上
   * @author LeaFish <735683662@qq.com>
   * @date 2019-03-13
   */
  this.addToBody = function () {
    var element = null;

    if (this.displayMethod === "canvas") {
      element = this.canvas;
    } else {
      var base64 = this.canvas.toDataURL("image/png");
      element = document.createElement('div');
      element.style.backgroundSize = innerWidth + "px";
      element.style.backgroundImage = "url(" + base64 + ")";
      element.style.backgroundRepeat = "repeat";
    }

    element.id = this.id;
    element.style.position = "fixed";
    element.style.left = 0;
    element.style.right = 0;
    element.style.top = 0;
    element.style.bottom = 0;
    element.style.pointerEvents = "none"; // 蒙層事件穿透
    element.style.zIndex = 20000000;

    document.getElementById(this.id) && document.body.removeChild(document.getElementById(this.id));
    document.body.appendChild(element);
  }
}

/**
 * @description 處理多l(xiāng)oad事件回調(diào)函數(shù)覆蓋問(wèn)題
 * @author LeaFish <735683662@qq.com>
 * @date 2019-03-13
 * @param {*} x
 */
function addOnloadEvent(x) {
  var oldOnLoad = window.onload;
  if (typeof oldOnLoad != "function") {
    window.onload = x;
  } else {
    window.onload = function () {
      oldOnLoad();
      x();
    }
  }
}

addOnloadEvent(function () {
  // 避免iframe間多層水印層疊
  document.getElementById("ptifrmtemplate") && setTimeout(function () {
    var options = {
      text: parent.document.getElementsByClassName("greeting")[0].innerText.split(":")[1], // 從歡迎語(yǔ)中獲取要作為水印的文本內(nèi)容
      isOnResize: false,
      displayMethod: "background"
    }
    new Watermark(options).init();
  }, 50);
})

watermark.js使用注意事項(xiàng)

  1. 代碼中水印文本內(nèi)容是從歡迎語(yǔ)中獲取的吹由,可根據(jù)自身需求修改水印文本的獲取方式若未,例如請(qǐng)求數(shù)據(jù)接口獲劝揪堋陕截;

  2. Watermark對(duì)象繪制水印可同時(shí)支持移動(dòng)端和PC端堂淡;

開(kāi)發(fā)者可理解實(shí)現(xiàn)思路忘衍,實(shí)現(xiàn)出更符合自身需求的水印排版。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末密幔,一起剝皮案震驚了整個(gè)濱河市弦讽,隨后出現(xiàn)的幾起案子忙芒,更是在濱河造成了極大的恐慌磕道,老刑警劉巖供屉,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溺蕉,居然都是意外死亡伶丐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)焙贷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贿堰,你說(shuō)我怎么就攤上這事辙芍。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵故硅,是天一觀的道長(zhǎng)庶灿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吃衅,這世上最難降的妖魔是什么往踢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮徘层,結(jié)果婚禮上峻呕,老公的妹妹穿的比我還像新娘。我一直安慰自己趣效,他們只是感情好瘦癌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著跷敬,像睡著了一般讯私。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上西傀,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天斤寇,我揣著相機(jī)與錄音,去河邊找鬼拥褂。 笑死娘锁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肿仑。 我是一名探鬼主播致盟,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尤慰!你這毒婦竟也來(lái)了馏锡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伟端,失蹤者是張志新(化名)和其女友劉穎杯道,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體责蝠,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡党巾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霜医。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齿拂。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肴敛,靈堂內(nèi)的尸體忽然破棺而出署海,到底是詐尸還是另有隱情吗购,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布砸狞,位于F島的核電站捻勉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刀森。R本人自食惡果不足惜踱启,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望研底。 院中可真熱鬧埠偿,春花似錦、人聲如沸飘哨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芽隆。三九已至浊服,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚吁,已是汗流浹背牙躺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腕扶,地道東北人孽拷。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像半抱,于是被迫代替她去往敵國(guó)和親脓恕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,128評(píng)論 0 3
  • 【直播回顧】 在周四收評(píng)中窿侈,鵬凱指出指數(shù)仍然有反彈空間: 周五早評(píng)提示向上突破2894的概率大炼幔,事實(shí)上指數(shù)盤(pán)中沖擊...
    看市者鵬凱閱讀 533評(píng)論 0 0
  • 昨晚洗澡洗的睡得晚了,早上特意讓孩子多睡一會(huì)史简,快7點(diǎn)了才叫他起床乃秀。收拾一下洗漱完畢趕緊吃飯,還好我去上班沒(méi)有遲到圆兵,...
    2019影閱讀 82評(píng)論 0 1
  • 第一跺讯,懷著好奇心廣泛閱讀。那些思路清晰的人殉农,往往有跨學(xué)科背景刀脏,而廣泛閱讀正是了解不同學(xué)科的一種手段,閱讀給我們提供...
    雷米巴比力閱讀 535評(píng)論 0 0
  • 我獻(xiàn)血的起源要從2017年的夏天說(shuō)起了超凳,應(yīng)一直堅(jiān)持跑步愈污,突發(fā)奇想想?yún)⒓玉R拉松比賽危队,還有一個(gè)同事,也是和我一樣...
    A劉澤成閱讀 627評(píng)論 1 1