91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel8/LaravelS如何實現彈幕功能

發布時間:2023-02-09 13:56:38 來源:億速云 閱讀:169 作者:iii 欄目:編程語言

本篇內容主要講解“Laravel8/LaravelS如何實現彈幕功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Laravel8/LaravelS如何實現彈幕功能”吧!

第一步:安裝Laravel8

composer create-project laravel/laravel labarrage

第二步:Laravel8中使用vue

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

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

安裝vue及bootstrap

npm install

安裝彈幕組件

npm install vue-baberrage --save

運行

npm run dev

第四步:安裝LaravelS實現Websocket服務器

請參考 Laravel8使用laravel-s實現WebSocket服務器

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

文件:resources/js/app.js 新增如下內容

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


Vue.component('danmu-component', require('./components/DanmuComponent.vue').default);

第五步:編寫文彈幕組件

位置: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">發送</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;
   }

   h2, h3 {
       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>

第六步:視圖中使用組件

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

@extends('layouts.app')

@section('content')
   <danmu-component></danmu-component>
@endsection

第七步:注冊路由

Route::get('/danmu', function() {
   return view('danmu');
});

執行 npm run dev

第八步:編寫websocket服務器

文件:App\Handlers\WebSocketHandler.php

<?php
namespace App\Handlers;

use Hhxsv5\LaravelS\Swoole\WebSocketHandlerInterface;
use Illuminate\Support\Facades\Log;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
use Swoole\WebSocket\Server;

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

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

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

   // 連接關閉時觸發
   public function onClose(Server $server, $fd, $reactorId)
   {
       Log::info('WebSocket 連接關閉:' . $fd);
   }
}

第九步:laravels.php注冊

文件:config/laravels.php

'websocket' => [
   'enable' => true,
   'handler' =>  \App\Handlers\WebSocketHandler::class,
],

第十步:啟動

php bin/laravels start

到此,相信大家對“Laravel8/LaravelS如何實現彈幕功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桑植县| 仁化县| 江孜县| 岢岚县| 合肥市| 白山市| 尖扎县| 武邑县| 浦北县| 依兰县| 犍为县| 固安县| 贵阳市| 介休市| 宣汉县| 桓仁| 宁海县| 廉江市| 兴文县| 青神县| 万州区| 苍溪县| 那坡县| 友谊县| 繁峙县| 彩票| 丹棱县| 金寨县| 旅游| 邻水| 崇仁县| 门源| 新晃| 锦屏县| 平定县| 湟中县| 上饶市| 连山| 宿州市| 玉溪市| 汽车|