Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日本欧美综合免费视频,中文字幕在线视频不卡,性色在线视频精品

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          巧用CSS3-Animation動(dòng)畫,實(shí)現(xiàn)小程序彈幕效果

          近接到公司小程序項(xiàng)目首頁迭代改版的工作,涉及到文章圖文布局改版。主要是精選文章,在首頁推廣入口增加評(píng)論彈幕效果,后端彈幕數(shù)據(jù)是隨文章列表接口一次性返回給前端,由前端來處理彈幕數(shù)據(jù)及相關(guān)彈幕交互效果。

          隨后,簡單分析了一下后端接口的數(shù)據(jù)結(jié)構(gòu),以及查詢了一些傳統(tǒng)web端彈幕的js實(shí)現(xiàn)方式。

          鑒于我們當(dāng)前業(yè)務(wù)的后端彈幕數(shù)據(jù)非動(dòng)態(tài)持續(xù)發(fā)送,而是固定的評(píng)論條目,前端處理也僅僅是把文章評(píng)論渲染成彈幕并循環(huán)滾動(dòng),于是我采用的解決方案是通過css3的Animation動(dòng)畫屬性來實(shí)現(xiàn)。

          下面是拆分出來的部分代碼demo實(shí)現(xiàn)效果的動(dòng)畫演示效果。



          左邊的視頻演示:有序彈幕(固定軌道式,彈幕數(shù)據(jù)劃分為三條固定軌道進(jìn)行滾動(dòng)顯示)

          右邊的視頻演示:無序彈幕(每條彈幕的出現(xiàn)位置隨機(jī)性);

          如果視頻無法播放的話,可以查看下方對(duì)比圖:




          當(dāng)前代碼邏輯比較適合一些展示型的前端交互效果,比如:資訊類欄目、社交屬性圖文欄目、推廣類廣告位等。

          # 無序彈幕 wxml #

          <view class='dmGroup' wx:for="{{ dmData }}" wx:key="{{ item.id }}" style="top:{{ item.top }}%; animation: dmAnimation {{item.time}}s linear {{ index*3 }}s infinite; ">
           <view class='dmItem'>
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          


          # 無序彈幕 wxss #

          @keyframes dmAnimation{
           from{ left: 100%; }
           to{ left: -100%; }
          }
          


          # 有序彈幕(軌道式) wxml #

          <!-- top -->
          <view class='dmGroup top' style="animation: dmAnimation2 35s linear infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index < 6 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          <!-- mid -->
          <view class='dmGroup mid' style="animation: dmAnimation2 30s linear 1s infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index > 5 && index < 10 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          <!-- btm -->
          <view class='dmGroup btm' style="animation: dmAnimation2 45s linear infinite; ">
           <view class='dmItem' wx:for="{{ dmData }}" wx:if="{{ index > 9 }}" wx:key="{{ item.id }}">
           <view class='dm'>
           <view class='avatarBox'>
           <image src='{{ item.sex == 0 ? avatarBoy : avatarGirl }}' class='avatar' mode='aspectFit'></image>
           <image src='{{ item.sex == 0 ? iconBoy : iconGirl }}' class='sex' mode='aspectFit'></image>
           </view>
           <text class='content'>{{ item.content }}</text>
           <image src='{{ iconGood }}' class='icon good' mode='aspectFill'></image>
           <text>{{ item.zanNumber }}</text>
           </view>
           </view>
          </view>
          


          # 有序彈幕 wxss #

          @keyframes dmAnimation2{ 
           0% { transform: translateX(0); } 
           100% { transform: translateX(-130%); } 
          }
          


          # 查看線上項(xiàng)目彈幕效果 #


          # 詳細(xì)代碼片段及詳解,請(qǐng)私信喲#



          者:Panda Shen

          轉(zhuǎn)發(fā)鏈接:https://www.overtaking.top/2018/06/21/20180621113025/

          聊時(shí)看了下斗魚直播,突然靈感乍現(xiàn),想做出這個(gè)彈幕效果,于是有了下文

          這里還是要說一下我的前端學(xué)習(xí)群:594959296,從我一個(gè)到現(xiàn)在的都是看我每一篇文章來的,可以說都是我們大前端的學(xué)霸啊,不定期分享干貨。想學(xué)到東西的都可以來,歡迎初學(xué)和進(jìn)階中的小伙伴

          說明:彈幕分兩種:

          1、像優(yōu)酷、愛奇藝等,記錄用戶發(fā)送彈幕時(shí)該視頻播放的位置,其他人播放這個(gè)視頻時(shí)到了這個(gè)點(diǎn)就顯示彈幕。

          2、像斗魚、熊貓這樣的直播網(wǎng)站,用戶發(fā)送彈幕直接顯示在屏幕上,以后不需要再顯示了。

          我們就來做第二種!!!

          實(shí)現(xiàn)效果

          項(xiàng)目分析

          1、獲取用戶輸入信息;

          2、在頁面中創(chuàng)建一個(gè) <span></span>來放獲取到的文本,并添加一些樣式(字體大小、顏色等);

          3、給這個(gè) span添加一個(gè)從右向左移動(dòng)的動(dòng)畫;

          4、動(dòng)畫結(jié)束后,移除這個(gè) <span>

          思路很清楚了,就來動(dòng)手實(shí)現(xiàn)一下。。

          布局

          頁面中要有一個(gè)輸入框讓用戶輸入信息,還要一個(gè)盒子用來顯示彈幕。為了美觀,我多加了一些東西。

          1、#dm 是顯示彈幕的區(qū)域,input供用戶輸入信息(其中 placeholder 屬性規(guī)定輸入框中默認(rèn)顯示內(nèi)容)。

          2、其它元素都是為了美觀和布局。

          樣式

          跟以前一樣,先給出代碼然后再講解。

          1、首先還是格式化瀏覽器默認(rèn)的 marginpaddingoverflow屬性設(shè)置超出屏幕的部分隱藏,這樣就不會(huì)出現(xiàn)下拉和水平的滾動(dòng)條了。

          2、#dm用來顯示彈幕,我們把它的高度設(shè)置為 90vhvh 是 CSS3 中新增的長度單位,表示相對(duì)于視口的高度。視口高度被均分為100單位的vh,90vh 就表示當(dāng)前瀏覽器可視區(qū)域高度的 90%。(vw 就是視口寬度)

          3、#dm span是每條彈幕的樣式。你可以修改為你喜歡的樣子,不過一定要設(shè)置 position
          定位屬性。

          4、然后就是下面的輸入部分了。使用了 flex布局 (也是CSS3 中新增的內(nèi)容,太方便了)。只需要 align-items:center;justify-content:center; 這兩句就可以使其中的子元素在水平和垂直方向居中。所以 #idDom#content都使用了。

          5、然后就是 輸入框、按鈕的樣式了,沒什么好說的,應(yīng)該都能看懂。

          JS部分

          先看看代碼吧。。

          1、說明:向頁面添加彈幕使用 addBarrage() 函數(shù),添加動(dòng)畫用 move()函數(shù)。(把一種功能封裝為一個(gè)函數(shù)是一個(gè)好習(xí)慣)

          2、首先思考一下彈幕的觸發(fā)事件。應(yīng)該有兩個(gè):點(diǎn)擊“發(fā)射”按鈕、按下 Enter按鍵。所以分別監(jiān)聽點(diǎn)擊 和 鍵盤事件。

          3、然后就要思考怎么向頁面添加彈幕了?

          先得到用戶輸入的信息

          然后在頁面中創(chuàng)建一個(gè)

          <span></span>

          把得到的文本放進(jìn)去

          添加到 #dm這個(gè)盒子中:

          • 這樣就可以了嗎?? 當(dāng)然不是的。。

          4、每條彈幕應(yīng)該有不同的顏色,這樣才炫酷。思路就是把預(yù)先的顏色放進(jìn)一個(gè)數(shù)組,使用的時(shí)候用隨機(jī)的下標(biāo),這樣就獲得了隨機(jī)顏色。(借鑒斗魚的 7 中顏色)

          這樣每條彈幕就有不同的顏色了。

          5、每條彈幕在頁面上還要有不同的位置(高度),也就是不同的 top 值。我的想法是,雖然要有不同的 top ,但也不能太隨意。就像下面這樣:(一行是一行的)

          我的思路是:先判斷頁面可以放多少行?

          然后計(jì)算可以有的 top 值:(加 10 是為了不至于緊挨著屏幕頂部,最后的 -1 是為了不至于太靠下 )

          你可以自己理解一下我的這種計(jì)算方式。。

          然后應(yīng)用給

          <span>

          即可:

          6、對(duì)了,彈幕應(yīng)該添加到頁面的什么位置呢?因?yàn)閺椖灰獜挠彝笠苿?dòng),所以應(yīng)該添加到屏幕的右側(cè),left 值為瀏覽器頁面的寬度。這時(shí)候就知道為什么前面要設(shè)置 body 的 overflow: hidden;了吧!!

          動(dòng)畫

          彈幕(也就是<span>)被添加到頁面中了,我們要讓他動(dòng)起來。思路就是寫一個(gè)函數(shù),減少 <span>

          的 left 值。每隔幾毫秒執(zhí)行一次這個(gè)函數(shù),我們看起來這個(gè) <span>元素就動(dòng)起來了。

          7、但是有幾個(gè)問題:

          • 頁面中有多少個(gè)彈幕(<span>)?因?yàn)轫撁嬷兄挥?彈幕 使用的是 <span> 標(biāo)簽,所以這樣就可以獲取所有 <span>的 nodeList(類似數(shù)組但不是數(shù)組,可以使用下標(biāo)索引訪問):

          怎樣記錄每條彈幕的 left 值?獲取到所有的 <span>后,用一個(gè) for 循環(huán)將每一個(gè) <span> 的 left 值放進(jìn)一個(gè)數(shù)組:

          • 這樣 arr[] 就保存了所有彈幕的 left 值。

          8、接下來我們就逐個(gè)減少每條彈幕的 left 值:

          9、最后判斷如果彈幕已經(jīng)移出了頁面的左邊,就把這條彈幕刪除了吧。

          我們可以在開發(fā)工具中看一下這個(gè)過程:

          彈幕的 left 一直減小,移出頁面后 #dm中就沒有這個(gè) <span>了。

          10、最后處理一個(gè)小細(xì)節(jié)吧!當(dāng)我們點(diǎn)擊按鈕或按回車后,輸入框中的文字會(huì)保留,影響我們下次輸入,所以只要獲取到了用戶輸入的內(nèi)容,就把輸入框清空吧!

          到此,彈幕就實(shí)現(xiàn)了。。。

          學(xué)習(xí)javascript也是有門檻的,就是你的html和css至少還比較熟練,您不能連html這東東是干啥的都不知道就開始學(xué)javascript了,學(xué)乘除前,學(xué)好加減法總是有益無害的。

          如果想看到更加系統(tǒng)的文章和學(xué)習(xí)方法經(jīng)驗(yàn)可以關(guān)注我的微信公眾號(hào):‘web前端課程’關(guān)注后回復(fù)‘給我資料’可以領(lǐng)取一套完整的學(xué)習(xí)視頻


          主站蜘蛛池模板: 精品久久久中文字幕一区 | 人妻无码一区二区视频| 国产激情一区二区三区在线观看 | 国产午夜精品一区二区三区漫画 | 色狠狠AV一区二区三区| 亚洲国产精品一区二区三区久久| 亚洲一区AV无码少妇电影| 麻豆一区二区99久久久久| 亚洲AV无码一区二区乱孑伦AS| 人妻无码一区二区三区| 日韩一区二区三区视频久久| 国产成人高清亚洲一区久久| 精品久久综合一区二区| 免费精品一区二区三区在线观看| 中文字幕无线码一区2020青青| tom影院亚洲国产一区二区| 中文字幕一区二区三区在线观看 | 欧美日韩综合一区二区三区| 蜜臀AV一区二区| 秋霞无码一区二区| 亚洲制服中文字幕第一区| 久久久久久免费一区二区三区| 亚洲日本一区二区三区在线| 国产无套精品一区二区| 无码一区二区三区| 台湾无码一区二区| 亚洲区精品久久一区二区三区| 日韩精品一区二区三区老鸭窝 | 国产精品一区二区av不卡| 一本岛一区在线观看不卡| 一区二区三区四区在线播放| 中文字幕一区二区三区有限公司 | 亚洲片一区二区三区| 中文乱码精品一区二区三区| 在线视频一区二区三区三区不卡| 国产精品免费一区二区三区四区| 色狠狠一区二区三区香蕉| 色屁屁一区二区三区视频国产| 日韩精品一区二区午夜成人版| 国产免费无码一区二区| 亚洲一区精品视频在线|