久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    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ù)制

      運行

      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é)習:《laravel視頻教程》

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