日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端将数据转化为弹幕效果的实现方式

發布時間:2025/4/16 HTML 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端将数据转化为弹幕效果的实现方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

這個需求如題,大體上是將文章的評論數據,在文章的首圖上面以彈幕的形式出現。當時在做這個需求的時候,花了挺多精力的,踩了很多坑,現將彈幕的實現思路寫出來,如果喜歡的話可以點波贊/關注,支持一下,希望大家看完本文可以有所收獲。

個人博客了解一下:obkoro1.com


實現效果:

實現原理:

實現彈幕的原理,并不算太復雜,耗費一些時間,懟一懟應該都可以做出來。

  • 獲取彈幕數據。
  • 將彈幕設置為四個通道,每個通道最多只能出現兩條彈幕。
  • 使用setInterval動態設置dom的left屬性。
  • 使用dom的offsetWidth和屏幕的寬度判斷元素是否滾動超出屏幕,然后移除dom。

  • 實現步驟:

    1. 首先看一下html的結構。

    <div class="detailImg"><img src="url"/><div id="barrageDiv"><div id="barrageLayer1"></div><div id="barrageLayer2"></div><div id="barrageLayer3"></div><div id="barrageLayer4"></div></div></div><!--detailImg 設置relative, barrageDiv設置z-index在圖片上面,以及圖片的位置--><!---barrageLayer1~4 主要設置了一個top屬性讓四個div在各自的水平線上,形成四個通道-> 復制代碼

    關于這里的css樣式,關鍵點都在上面說了,就注意一下上面通道是怎樣形成的,就可以了。具體的樣式也就不貼出來了,就根據各自的需求來吧。

    2.獲取彈幕所需要的數據。

    要實現彈幕效果肯定需要有數據,這里就是發請求了。

    獲取數據時,要考慮數據量,一次不可能全部都獲取,可以一次獲取一部分,當數據要加載完的時候,再次請求數據。

    這里要記錄數據數據是否全部請求完成,如果請求完成,就可以不再發送數據,直接用之前獲取的全部數據就可以了。

    3.執行彈幕的函數。

    彈幕數據獲取后,就執行彈幕運行的函數,因為我在寫彈幕函數的時候,設置了很多數據狀態,這里就大概講一下實現思路和關鍵部分代碼。

    彈幕函數包括的功能:

  • 定時獲取數據(判斷數據是否加載完畢)

  • 定時發射彈幕(判斷通道是否閑置),傳入彈幕所需要的內容,用戶頭像等。

  • 創建dom內容,根據傳參生成彈幕div,設置style屬性,根據控制彈幕數據數組的下標將div插入對應的dom中。

  • 采用定時器移動dom,這里是根據內容長度定義彈幕的移動速度。

  • 移動彈幕的過程中判斷四個通道是否處于閑置狀態,當dom移動出了屏幕,移動dom并且清除定時器。

    function barrage(){//第一部分先判斷數據是否加載完成 這里是一個定時器,設置為15秒。//如果數據還未加載完畢,就再次運行請求數據的接口,請求的頁數可以 數組/每次請求的條數+1//數據加載完畢就清除定時器。(我將定時器都保存在vue 組件的data里面) 清除的時候clearInterval(this.data);//定時發射_this.barrageStatus.divStatus.intervalid=setInterval( selfTime,1100);function selfTime() { if(_this.dataNum>=_this.barrageStatus.data.length){//當dataNum大于等于數組的數量時,彈幕從頭再來一遍_this.dataNum=0;}//設置四個通道的變量,當這幾個變量為false的時候,才可發射if(divStatus.div1===false){//這里只演示其中一個變量divStatus.div1=true;_this.dataNum++; return barrageOut(_this.barrageStatus.data[_this.dataNum-1].content,_this.barrageStatus.data[_this.dataNum-1].commentator.headImgUrl,_this.dataNum);}};// 創建彈幕內容,自定義彈幕移動速度function barrageOut(text,imgUrl,num) { //text:彈幕的內容,imgUrl:用戶的頭像,num:數組的第幾個if(num%4==1){ //根據數組下標 創建對應通道的節點 這里也演示其中一個barrageLayer=document.getElementById('barrageLayer1');}// 創建dom內容 定義dom style樣式let divBox = document.createElement('div');let divBoxImg=document.createElement('span');let divBoxText=document.createElement('span');divBox.setAttribute('class','barrageDivClass');divBoxText.innerHTML=text;divBox.appendChild(divBoxImg);divBoxImg.setAttribute('class','barrageDivClass_img');divBoxImg.style.backgroundImage=`url(${imgUrl})`;divBox.appendChild(divBoxText);divBox.style.left=document.body.clientWidth+2000+'px';// 初始化left位置,一開始在屏幕的右側barrageLayer.appendChild(divBox);// 定時器移動dom,形成彈幕let time,l=0;time= setInterval(function(){if(text.length<15){ // 這里可以根據需求自定義彈幕加載的速度l=l-1;}else{l=l-2;}//通過減少left屬性移動這個div 從右往左移動divBox.style.left = document.body.clientWidth+l+'px';let delDiv=()=>{if(num%4==1){ //在移動彈幕的過程中判斷四個通道是否處于閑置狀態 這里只演示其中一個barrageLayer=document.getElementById('barrageLayer1');if(barrageLayer.childNodes.length<2){//判斷彈幕數量,如果小于2,設為false,上面的定時器可以繼續發射彈幕divStatus.div1=false;}else{divStatus.div1=true;}}}}if( l <= (0-divBox.offsetWidth-120) ){ if(_this.barrageStatus.divStatus.switch==true){ //彈幕開關delDiv();if(l <= (0-divBox.offsetWidth-document.body.clientWidth) ){//不斷減少left屬性,當小于這個內容的寬度,并且滾了120的時候barrageLayer.removeChild(divBox); //移除domclearInterval(time);//清除這個div的定時器}}else{clearInterval(time);//清除這個div的定時器}}},20)}} 復制代碼

  • 結語

    這個彈幕需求,我是如上這么實現的,回頭看看實現,發現還是有不少地方可以優化和拆分的,如果有更好的實現思路和本文有哪些錯誤,歡迎在評論區下面留言。

    希望看完的朋友可以點個喜歡/關注,您的支持是對我最大的鼓勵。

    最后:如需轉載,請放上原文鏈接并署名。碼字不易,感謝支持!本人寫文章本著交流記錄的心態,寫的不好之處,不撕逼,但是歡迎指點。

    個人blog and 掘金個人主頁

    關注我的訂閱號,來一起學習成長。

    以上2018.4.29

    參考資料:

    純js 實現彈幕效果

    總結

    以上是生活随笔為你收集整理的前端将数据转化为弹幕效果的实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕成人网 | 一级片视频播放 | 在线观看免费视频国产 | 午夜伦理在线观看 | 国模小黎自慰gogo人体 | 久久久久久久久久亚洲 | 亚洲日本护士毛茸茸 | 欧美精品xxx| 欧美日韩在线网站 | 午夜福利一区二区三区 | 精品久久久久久亚洲综合网站 | 欧美 日韩 国产 成人 在线 91 | 亚洲第一区视频 | 欧美亚洲 | 一个人看的www视频在线观看 | 亚洲国产欧美在线观看 | 91精品国产麻豆国产自产在线 | 一区二区三区中文字幕在线观看 | 神马午夜嘿嘿 | 国产精品国产三级国产三级人妇 | 九九精品在线视频 | 亚洲婷婷在线视频 | 91丨porny丨对白 | 美女主播福利视频 | 三及毛片| 成人亚洲精品久久久久软件 | 高清福利视频 | 国产高清一区二区三区 | 久久精品牌麻豆国产大山 | 久久夜色精品 | 日韩视频一区在线观看 | 青青操青青 | 曰曰操 | 欧美色久 | 国产永久免费观看 | 公妇借种乱htp109cc | 操xxxx| 亚洲精品一区二区18漫画 | 精品久久影院 | 国产精品免费看久久久无码 | 在线观看深夜视频 | 神马久久精品 | 国产成人精品综合 | 在线免费视频你懂的 | 中文字幕日韩一区二区 | 久久午夜网站 | 原创av | 国产国语性生话播放 | 成人网站免费观看 | 全程偷拍露脸中年夫妇 | 激情视频在线观看免费 | 国产乱人伦精品一区二区 | 国产真实自拍 | 538精品在线视频 | 在线免费观看网站入口在哪 | 国产精品国产精品国产专区蜜臀ah | 一级特黄录像免费看 | 国产一区二区黑人欧美xxxx | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 小sao货cao死你| 欧美日韩在线视频观看 | 人妻无码一区二区三区久久99 | 狠操av| 欧日韩在线视频 | 华人永久免费 | 中文字幕一区二区三区人妻不卡 | 黄色天堂网 | 欧洲免费毛片 | www.色妞| 欧美日韩在线a | se综合 | 成人三级做爰av | 黄色国产一区 | 三级国产在线观看 | 久久精品国产亚洲av香蕉 | 久久国产精品影视 | 成人免费看片视频 | 青娱乐久久 | 在线免费观看h片 | 99久久久无码国产精品性波多 | 国内自拍偷拍网 | 日本一级淫片色费放 | 日本少妇一区 | 富二代成人短视频 | 成人黄页网站 | 国产专区在线播放 | 欧美激情在线看 | 蜜臀少妇久久久久久久高潮 | 一区二区91| 嫩草av在线| 亚洲视频在线观看一区二区 | 欧美888 | 快乐激情网| 精品国产乱码久久久久久鸭王1 | 天天操夜夜操夜夜操 | 一区二区在线观看免费视频 | 香蕉视频一级 | 国内精品久久久 | 国产日韩网站 |