欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          一文詳解Laravel8/LaravelS實現(xiàn)彈幕功能

          本篇文章給大家?guī)砹岁P(guān)于Laravel8/LaravelS的相關(guān)知識,其中主要介紹了Laravel8基于LaravelS實現(xiàn)彈幕功能的方法步驟,感興趣的朋友,下面一起來看一下,希望對大家有幫助。

          Laravel8基于LaravelS實現(xiàn)彈幕彈幕功能

          簡介

          Laravel8基于LaravelS實現(xiàn)彈幕彈幕功能。前面學(xué)了基于Swoole實現(xiàn)視頻彈幕功能,這篇文章就來實現(xiàn)一個基于Laravel8的視頻彈幕功能。如果對webpack不熟悉,那么在安裝vue-baberrage組件時可能會報錯卻不知如何解決。下面開始一步一步實現(xiàn)。

          前面學(xué)了基于Swoole實現(xiàn)視頻彈幕功能,這篇文章就來實現(xiàn)一個基于Laravel8的視頻彈幕功能。如果對webpack不熟悉,那么在安裝vue-baberrage組件時可能會報錯卻不知如何解決。下面開始一步一步實現(xiàn)。

          第一步:安裝Laravel8

          composer create-project laravel/laravel labarrage
          登錄后復(fù)制

          第二步:Laravel8中使用vue

          Laravel8如何使用vue,請參考 Laravel8中使用vue。

          注意:安裝vue時請使用 php artisan ui vue –auth

          第三步:安裝及安裝vue-baberrage

          安裝vue及bootstrap

          npm install
          登錄后復(fù)制

          安裝彈幕組件

          npm install vue-baberrage --save
          登錄后復(fù)制

          運(yùn)行

          npm run dev
          登錄后復(fù)制

          如果遇到BREAKING CHANGE: webpack < 5 used to include錯誤,請參考 Laravel8使用webpack報錯的解決方法。

          后續(xù)只要文件改動就需要重新編譯,后續(xù)將不再復(fù)述。

          第四步:安裝LaravelS實現(xiàn)Websocket服務(wù)器

          請參考 Laravel8使用laravel-s實現(xiàn)WebSocket服務(wù)器

          第五步:項目中引入vue-baberrage組件

          文件:resources/js/app.js 新增如下內(nèi)容

          import { vueBaberrage } from 'vue-baberrage'
          Vue.use(vueBaberrage)


          Vue.component('danmu-component', require('./components/DanmuComponent.vue').default);
          登錄后復(fù)制

          第五步:編寫文彈幕組件

          后續(xù)實現(xiàn)代碼根據(jù) 學(xué)院君 文章改動

          位置:resources/js/components/DanmuComponent.vue

          <template>
          <div id="danmu">
          <div class="stage">
          <vue-baberrage
          :isShow = "barrageIsShow"
          :barrageList = "barrageList"
          :loop = "barrageLoop"
          :maxWordCount = "60"
          >
          </vue-baberrage>
          </div>
          <div class="danmu-control">
          <div>
          <select v-model="position">
          <option value="top">從上</option>
          <option value="abc">從右</option>
          </select>
          <input type="text" style="float:left" v-model="msg"/>
          <button type="button" style="float:left" @click="addToList">發(fā)送</button>
          </div>
          </div>
          </div>
          </template>

          <script>
          import { MESSAGE_TYPE } from 'vue-baberrage'

          export default {
          name: 'danmu',
          data () {
          return {
          msg: 'hello 自如初!',
          position: 'top',
          barrageIsShow: true,
          currentId: 0,
          barrageLoop: false,
          barrageList: []
          }
          },
          methods: {
          removeList () {
          this.barrageList = []
          },
          addToList () {
          if (this.position === 'top') {
          this.barrageList.push({
          id: ++this.currentId,
          msg: this.msg + this.currentId,
          barrageStyle: 'top',
          time: 8,
          type: MESSAGE_TYPE.FROM_TOP,
          position: 'top'
          })
          } else {
          this.barrageList.push({
          id: ++this.currentId,
          msg: this.msg,
          time: 15,
          type: MESSAGE_TYPE.NORMAL
          })
          }
          }
          }
          }
          </script>
          <style lang="scss" scoped>
          #danmu {
          text-align: center;
          color: #2c3e50;
          }
          .stage {
          height: 300px;
          width: 100%;
          background: #025d63;
          margin: 0;
          position: relative;
          overflow: hidden;
          }

          h1, h2 {
          font-weight: normal;
          }
          ul {
          list-style-type: none;
          padding: 0;
          }
          li {
          display: inline-block;
          margin: 0 10px;
          }

          a {
          color: #42b983;
          }

          .baberrage-stage {
          z-index: 5;
          }

          .baberrage-stage .baberrage-item.normal{
          color:#FFF;
          }
          .top{
          border:1px solid #66aabb;
          }
          .danmu-control{
          position: absolute;
          margin: 0 auto;
          width: 100%;
          bottom: 300px;
          top: 70%;
          height: 69px;
          box-sizing: border-box;
          text-align: center;
          display: flex;
          justify-content: center;
          div {
          width: 300px;
          background: rgba(0, 0, 0, 0.6);
          padding: 15px;
          border-radius: 5px;
          border: 2px solid #8ad9ff;
          }
          input,button,select{
          height:35px;
          padding:0;
          float:left;
          background:#027fbb;
          border:1px solid #CCC;
          color:#FFF;
          border-radius:0;
          width:18%;
          box-sizing: border-box;
          }
          select{
          height:33px;
          margin-top:1px;
          border: 0px;
          outline: 1px solid rgb(204,204,204);
          }
          input{
          width:64%;
          height:35px;
          background:rgba(0,0,0,.7);
          border:1px solid #8ad9ff;
          padding-left:5px;
          color:#FFF;
          }
          }
          </style>
          登錄后復(fù)制

          第六步:視圖中使用組件

          位置:resources/views/danmu.blade.php

          @extends('layouts.app')

          @section('content')
          <danmu-component></danmu-component>
          @endsection
          登錄后復(fù)制

          第七步:注冊路由

          Route::get('/danmu', function() {
          return view('danmu');
          });
          登錄后復(fù)制

          執(zhí)行 npm run dev

          第八步:編寫websocket服務(wù)器

          文件:AppHandlersWebSocketHandler.php

          <?php
          namespace AppHandlers;

          use Hhxsv5LaravelSSwooleWebSocketHandlerInterface;
          use IlluminateSupportFacadesLog;
          use SwooleHttpRequest;
          use SwooleWebSocketFrame;
          use SwooleWebSocketServer;

          class WebSocketHandler implements WebSocketHandlerInterface
          {
          public function __construct()
          {
          }

          // 連接建立時觸發(fā)
          public function onOpen(Server $server, Request $request)
          {
          Log::info('WebSocket 連接建立:' . $request->fd);
          }

          // 收到消息時觸發(fā)
          public function onMessage(Server $server, Frame $frame)
          {
          // $frame->fd 是客戶端 id,$frame->data 是客戶端發(fā)送的數(shù)據(jù)
          Log::info("從 {$frame->fd} 接收到的數(shù)據(jù): {$frame->data}");
          foreach($server->connections as $fd){
          if (!$server->isEstablished($fd)) {
          // 如果連接不可用則忽略
          continue;
          }
          $server->push($fd , $frame->data); // 服務(wù)端通過 push 方法向所有連接的客戶端發(fā)送數(shù)據(jù)
          }
          }

          // 連接關(guān)閉時觸發(fā)
          public function onClose(Server $server, $fd, $reactorId)
          {
          Log::info('WebSocket 連接關(guān)閉:' . $fd);
          }
          }
          登錄后復(fù)制

          第九步:laravels.php注冊

          文件:config/laravels.php

          'websocket' => [
          'enable' => true,
          'handler' => AppHandlersWebSocketHandler::class,
          ],
          登錄后復(fù)制

          第十步:啟動

          php bin/laravels start
          登錄后復(fù)制

          這樣就完成啦

          推薦學(xué)習(xí):《laravel視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號