亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(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é)習(xí):《laravel視頻教程》

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