頁面添加水印(防止刪除)

//僅學習記錄使用

頁面使用

import watermark from '@/utils/watermark.js'
export default {
    name: 'App',
   data() {
        return {
            str: {
                name: this.$store.getters.userName, //
                phone: (this.$store.getters.mobile || '').substr(-4),
                company: '公司'
            }
        }
    },
    mounted() {
        watermark.set(this.str)
    },
    created() {
    },
    updated() {
        console.log('更新了', '更新了')
    },
    destroyed() {
        watermark.out(this.str)
    }
}

js核心代碼

const id = '1.23452384164.123412416'
const setWatermark = (str) => {
    const existingWatermark = document.getElementById(id)
    if (existingWatermark !== null) {
        document.body.removeChild(existingWatermark)
    }

    // 創(chuàng)建一個畫布
    const canvas = document.createElement('canvas')
    // 設置畫布的長寬
    canvas.width = 220
    canvas.height = 220

    const context = canvas.getContext('2d')
    // 控制文字的旋轉角度和上下位置
    context.rotate(-20 * Math.PI / 180)
    context.translate(-50, 20)
    // 文字顏色
    context.fillStyle = 'rgba(0,0,0,0.07)'
    context.textBaseline = 'Middle'
    context.font = '14px Arial,"PingFang SC","Microsoft YaHei","Helvetica Neue",Helvetica,"Hiragino Sans GB",sans-serif'
    // 在畫布上繪制填色的文本(輸出的文本隙券,開始繪制文本的X坐標位置,開始繪制文本的Y坐標位置)
    const text = `${str.name} ${str.phone}`
    context.fillText(text, canvas.width / 4, canvas.height / 2.5)
    context.fillText(text, canvas.width / 3, canvas.height)
    //
    const div = document.createElement('div')
    div.id = id
    div.style.pointerEvents = 'none'
    div.style.top = '0vw'
    div.style.left = '0vw'
    div.style.position = 'fixed'
    div.style.zIndex = '99'
    div.style.display = 'block'
    div.style.width = '100vw'
    div.style.height = '100vw'
    div.style.background = 'url(' + canvas.toDataURL('image/png') + ') left top repeat'
    document.body.appendChild(div)
}
let observer = null
let timer = null
// 添加水印該方法只允許調(diào)用一次
const watermark = {
    set: (str) => {
        setWatermark(str)
        clearInterval(timer)
        timer = setInterval(() => {
            if (!document.getElementById(id)) setWatermark(str)
        }, 500)
        window.onresize = () => {
            setWatermark(str)
        }
        if (!observer) {
            observer = new MutationObserver((mutationsList) => {
                mutationsList.forEach(mutation => {
                    if (mutation.type === 'childList' || mutation.type === 'attributes') {
                        const target = mutation.target
                        if (target.id === id) {
                            setWatermark(str) // 重新添加水印
                        }
                    }
                })
            })

            const body = document.getElementsByTagName('body')[0]
            // 監(jiān)聽body節(jié)點
            observer.observe(body, {
                childList: true,
                attributes: true,
                characterData: true,
                subtree: true,
                attributeOldValue: true,
                characterDataOldValue: true
            })
        }
    },
    out: () => {
        // 去除水印
        const watermarkElement = document.getElementById(id)
        if (watermarkElement !== null) {
            watermarkElement.style.display = 'none'
            observer && observer.disconnect()
        }
        clearInterval(timer)
    }
}
export default watermark

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筐带,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子艾少,更是在濱河造成了極大的恐慌疚漆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奈附,死亡現(xiàn)場離奇詭異全度,居然都是意外死亡,警方通過查閱死者的電腦和手機斥滤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門将鸵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佑颇,你說我怎么就攤上這事顶掉。” “怎么了漩符?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵一喘,是天一觀的道長。 經(jīng)常有香客問我嗜暴,道長凸克,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任闷沥,我火速辦了婚禮萎战,結果婚禮上,老公的妹妹穿的比我還像新娘舆逃。我一直安慰自己蚂维,他們只是感情好戳粒,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虫啥,像睡著了一般蔚约。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂籽,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天苹祟,我揣著相機與錄音,去河邊找鬼评雌。 笑死树枫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的景东。 我是一名探鬼主播砂轻,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斤吐!你這毒婦竟也來了搔涝?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤和措,失蹤者是張志新(化名)和其女友劉穎体谒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臼婆,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡抒痒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颁褂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片故响。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颁独,靈堂內(nèi)的尸體忽然破棺而出彩届,到底是詐尸還是另有隱情,我是刑警寧澤誓酒,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布樟蠕,位于F島的核電站,受9級特大地震影響靠柑,放射性物質發(fā)生泄漏寨辩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一歼冰、第九天 我趴在偏房一處隱蔽的房頂上張望靡狞。 院中可真熱鬧,春花似錦隔嫡、人聲如沸甸怕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梢杭。三九已至温兼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間武契,已是汗流浹背妨托。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吝羞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓内颗,卻偏偏與公主長得像钧排,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子均澳,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345