js實(shí)現(xiàn)視頻播放時(shí)屏幕顯示水印
需求描述:視頻在播放的時(shí)候能夠顯示當(dāng)前觀看人的姓名并隨機(jī)切換位置
內(nèi)心Os:這個(gè)加水印不是視頻剪輯工具的功能嗎 為啥要讓前端來寫 什么鬼[崩潰] 沒辦法崩潰歸崩潰 需求還得寫啊
思路:既然是在視頻播放的時(shí)候 那就跟video標(biāo)簽在同一級(jí)Dom中 用css定位來實(shí)現(xiàn)浮動(dòng)在視頻之上 不就可以了? 有想法就干
上來我就是直接獲取video所在的Dom元素 因?yàn)槲业膙ideo是包裹在class是videoPlayBox的div中 所以我先獲取到了video的父元素 然后在獲取父元素中下屬元素
let div = document.getElementById("videoPlayBox"); let divChild = div.firstChild;
創(chuàng)建一個(gè)容納水印數(shù)據(jù)的Dom元素并給他樣式
var appDom = document.createElement("div"); // appDom.id = "userName";//給這個(gè)元素設(shè)置id // appDom.setAttribute("class", "watermarkClass");//給這個(gè)元素設(shè)置類名 // 你也可以直接就是行內(nèi)樣式 appDom.style.cssText = `position:absolute;top:${this.topValue}px;left:${this.leftvalue}px; color:rgb(192, 196, 204);font-size:20px;opacity:0.5;`; // 再給這個(gè)元素寫入要顯示的水印內(nèi)容 appDom.innerText = text; // text就是你要顯示的內(nèi)容 //插入元素 divChild.appendChild(appDom);
這樣基本一個(gè)水印插入就完成了 下面就是實(shí)現(xiàn)隨機(jī)出現(xiàn)位置 都用position:absolute 肯定就是隨機(jī)改變top跟left就可以了 寫一個(gè)定時(shí)器 比如說2秒換一次位置
setInterval(() => { // 先獲取video所在區(qū)域的實(shí)際寬高 總不能直接讓這個(gè)定位離開這個(gè)所在區(qū)域把 let widthValue = document.getElementById("videoPlayBoxWapper").offsetWidth; let heightValue =document.getElementById("videoPlayBoxWapper").offsetHeight; // 然后就是取隨機(jī)數(shù) 賦值給你剛才 top 跟 left 綁定的值 this.leftvalue = widthValue * Math.random(); this.topValue = heightValue * Math.random(); // 至此 基本就完事了 但是你運(yùn)行起來后發(fā)現(xiàn) top 跟 left雖然改變了 但是頁面中卻沒有改變 document.getElementById("userName").style.left = `${this.leftvalue}px`; document.getElementById("userName").style.top = `${this.topValue}px`; // 再加上這一步就完事了 }, 2000);
當(dāng)然當(dāng)定時(shí)運(yùn)行的時(shí)候就要考慮到 多次觸發(fā)這個(gè)定時(shí)器 就會(huì)異步全部執(zhí)行 會(huì)導(dǎo)致出現(xiàn)的時(shí)間根本不是你設(shè)置的時(shí)間 所以你要在觸發(fā)這個(gè)方式的時(shí)候 先清除定時(shí)器 然后在執(zhí)行就會(huì)避免這個(gè)問題
if (this.timer != null) { clearInterval(this.timer); } this.timer = setInterval(() => { // 先獲取video所在區(qū)域的實(shí)際寬高 總不能直接讓這個(gè)定位離開這個(gè)所在區(qū)域把 let widthValue = document.getElementById("videoPlayBoxWapper").offsetWidth; let heightValue =document.getElementById("videoPlayBoxWapper").offsetHeight; // 然后就是取隨機(jī)數(shù) 賦值給你剛才 top 跟 left 綁定的值 this.leftvalue = widthValue * Math.random(); this.topValue = heightValue * Math.random(); // 至此 基本就完事了 但是你運(yùn)行起來后發(fā)現(xiàn) top 跟 left雖然改變了 但是頁面中卻沒有改變 document.getElementById("userName").style.left = `${this.leftvalue}px`; document.getElementById("userName").style.top = `${this.topValue}px`; // 再加上這一步就完事了 }, 2000);
到此這篇關(guān)于js實(shí)現(xiàn)視頻播放時(shí)屏幕顯示水印的文章就介紹到這了,更多相關(guān)js水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js面向?qū)ο髮?shí)現(xiàn)canvas制作彩虹球噴槍效果
這篇文章主要介紹了js面向?qū)ο髮?shí)現(xiàn)canvas制作彩虹球噴槍效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09原生JavaScript實(shí)現(xiàn)批量獲取表單數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用原生JavaScript實(shí)現(xiàn)批量獲取表單數(shù)據(jù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01webpack-mvc 傳統(tǒng)多頁面組件化開發(fā)詳解
這篇文章主要介紹了webpack-mvc 傳統(tǒng)多頁面組件化開發(fā)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05js 失去焦點(diǎn)時(shí)關(guān)閉層實(shí)現(xiàn)代碼
失去焦點(diǎn)時(shí)關(guān)閉層實(shí)現(xiàn)代碼。大家可以參考下。2009-05-05JS實(shí)用的動(dòng)畫彈出層效果實(shí)例
這篇文章主要介紹了JS實(shí)用的動(dòng)畫彈出層效果,實(shí)例分析了javascript實(shí)現(xiàn)動(dòng)畫效果彈出層的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05BetterScroll 在移動(dòng)端滾動(dòng)場(chǎng)景的應(yīng)用
BetterScroll 是一款重點(diǎn)解決移動(dòng)端各種滾動(dòng)場(chǎng)景需求的開源插件( GitHub地址 ),非常不錯(cuò),下面腳本之家小編給大家分享BetterScroll 在移動(dòng)端滾動(dòng)場(chǎng)景的應(yīng)用,一起看看吧2017-09-09關(guān)于Mozilla瀏覽器不支持innerText的解決辦法
在各大瀏覽器中,除Mozilla瀏覽器外,幾乎都支持一個(gè)元素的屬性:innerText。我們可以通過它來快速獲取某個(gè)元素的內(nèi)的文本。2011-01-01JS網(wǎng)絡(luò)游戲-(模擬城市webgame)提供的一些例子下載
JS網(wǎng)絡(luò)游戲-(模擬城市webgame)提供的一些例子下載...2007-10-10