国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

50行代碼搞定彈幕效果

sixgo / 915人閱讀

摘要:根據(jù)指定內(nèi)容生成彈幕,并初始化其位置以及其樣式,插入中。最終完整版代碼彈幕定時(shí)器控制彈幕顯隱變量監(jiān)聽發(fā)送按鈕創(chuàng)建彈幕添加定時(shí)任務(wù)監(jiān)聽關(guān)閉彈幕按鈕新建一個(gè)彈幕為彈幕添加定時(shí)任務(wù)最終效果圖快給自己刷波吧

前言

就在最近這幾年,彈幕這個(gè)東西慢慢地流行了起來。我們?cè)诰W(wǎng)上看視頻或者看直播都能見到彈幕的身影,有時(shí)候彈幕的內(nèi)容甚至比視頻本身內(nèi)容還要精彩。本人也是很喜歡彈幕這個(gè)東西,看到精彩處刷個(gè)彈幕都是常事。正好最近也比較空閑,于是就自己寫了一個(gè)Demo來展示一下彈幕效果的實(shí)現(xiàn)原理。不足之處,歡迎留言指教。

實(shí)現(xiàn)原理 項(xiàng)目結(jié)構(gòu)

項(xiàng)目結(jié)構(gòu)非常簡(jiǎn)單,非常標(biāo)準(zhǔn)的html+css+js的結(jié)構(gòu)。這里我們用了第三方的jQuery庫(kù)來幫助我們完成這個(gè)彈幕效果。如果有興趣的話,可以嘗試一下用原生js去實(shí)現(xiàn)這個(gè)功能,看完這篇文章相信你也可以輕輕松松地用原生js實(shí)現(xiàn)。

HTML和CSS文件內(nèi)容 HTML



    
    
    
    彈幕墻
    


    

這里我們頁(yè)面的布局非常簡(jiǎn)單,主要分為上下兩個(gè)div:

div.screen_container作為我們的彈幕墻,這里將會(huì)放我們發(fā)射的彈幕內(nèi)容。

div.screen_toolbar包含一個(gè)輸入框用于輸入我們需要發(fā)射的彈幕內(nèi)容、一個(gè)發(fā)射按鈕和一個(gè)關(guān)閉彈幕按鈕。

另外就是引入第三方庫(kù)以及我們自己的css和js。

CSS
.screen_container{
    position: relative;
    width: 600px;
    height: 400px;
    margin: 30px auto;
    background: #000;
    overflow: hidden;
}
.screen_toolbar{
    width: 600px;
    margin: 20px auto;
    text-align: center;
}

CSS的來稍微美化一下我們的布局,這里不設(shè)置我們的彈幕的樣式。

HTML+CSS效果圖

JS實(shí)現(xiàn) 彈幕總體實(shí)現(xiàn)原理

彈幕的實(shí)現(xiàn)原理非常簡(jiǎn)單,我們點(diǎn)擊”發(fā)射“按鈕,就根據(jù)輸入的彈幕的內(nèi)容生成一個(gè)div插入div.screen_container中,并隨機(jī)初始化我們生成的div的位置。這樣我們的彈幕墻中就有一個(gè)我們自己生成的彈幕了,但是此時(shí)的彈幕還沒有移動(dòng)效果,需要給它加個(gè)定時(shí)任務(wù),遞減彈幕的CSS屬性left的值,就可以實(shí)現(xiàn)移動(dòng)效果。最后當(dāng)彈幕移出彈幕墻的時(shí)候,銷毀一下彈幕。整個(gè)彈幕效果實(shí)現(xiàn)過程大致就是這樣,是不是很簡(jiǎn)單!

分段實(shí)現(xiàn)彈幕效果。 1. 根據(jù)指定內(nèi)容生成彈幕,并初始化其位置以及其樣式,插入div.screen_container中。
function createScreenbullet(text) {
    var jqueryDom = $("
" + text + "
"); var fontColor = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random()) + ")"; var fontSize = Math.floor((Math.random() + 1) * 24) + "px"; var left = $(".screen_container").width() + "px"; var top = Math.floor(Math.random() * 400) + "px"; top = parseInt(top) > 352 ? "352px" : top; jqueryDom.css({ "position": "absolute", "color": fontColor, "font-size": fontSize, "left": left, "top": top }); $(".screen_container").append(jqueryDom); return jqueryDom; }

這里我們需要注意以下幾點(diǎn):

這里我們是根據(jù)定位父級(jí)div.screen_container進(jìn)行定位,這里我們的彈幕值left值都是div.screen_container寬度(即:每個(gè)彈幕都從彈幕墻的最右邊向左移動(dòng))。

關(guān)于彈幕的top值的設(shè)定,由于我們字體大小設(shè)置在24px~48px之間,保險(xiǎn)起見,我們最高top值為352px(即div.screen_container的高度減去48)。

不要忘記給每個(gè)彈幕設(shè)置position屬性,值為”absolute“

2. 給彈幕加上定時(shí)任務(wù)。
function addInterval(jqueryDom) {
    var left = jqueryDom.offset().left - $(".screen_container").offset().left;
    var timer = setInterval(function () {
        left--;
        jqueryDom.css("left", left + "px");
        if (jqueryDom.offset().left + jqueryDom.width() < $(".screen_container").offset().left) {
            jqueryDom.remove();
            clearInterval(timer);
        }
    }, 10);
    timers.push(timer);
}

這里我們需要注意以下幾點(diǎn):

獲取指定彈幕的css屬性left值,除了上面的方法,還可以通過parseInt(jqueryDom.css("left"))或者parseFloat(jqueryDom.css("left"))獲取

消除彈幕的臨界點(diǎn)判斷。判斷彈幕是否出界,就是看彈幕的最右側(cè)是否出界來判斷。這里我們有兩種判斷方法。第一種,以游覽器最左側(cè)作為基準(zhǔn),彈幕距離游覽器最左側(cè)的值加上彈幕自身的寬度小于彈幕墻距離游覽器最左側(cè)的距離即為出界;第二種:parseFloat(jqueryDom.css("right"))>600判斷彈幕的css屬性right值是否大于600(即彈幕墻的寬度)。
3.timers是我們?cè)O(shè)置的一個(gè)全局定時(shí)任務(wù)隊(duì)列

3. 監(jiān)聽”發(fā)送”按鈕
$(".send").on("click", function () {
    // 創(chuàng)建彈幕
    var jqueryDom = createScreenbullet($("#screenBulletText").val());
    // 添加定時(shí)任務(wù)
    addInterval(jqueryDom);
});

如果我們想體驗(yàn)更好一點(diǎn),可以加個(gè)Enter按鈕監(jiān)聽。

$("#screenBulletText").on("keydown", function (event) {
    if (event.keyCode == 13) {
        // 創(chuàng)建彈幕
        var jqueryDom = createScreenbullet($("#screenBulletText").val());
        // 添加定時(shí)器
        addInterval(jqueryDom);
    }
});
4. 關(guān)閉彈幕功能

第一種:設(shè)置彈幕的透明度控制顯隱

下面isShow為全局變量,用來記錄彈幕的狀態(tài)。

$(".clear").on("click", function () {
    if (isShow) {
        $(".bullet").css("opacity", 0);
        isShow = false;
    } else {
        $(".bullet").css("opacity", 1);
        isShow = true;
    }
});

這樣的好處就是,定時(shí)任務(wù)不會(huì)終結(jié)。我們關(guān)閉彈幕,實(shí)際上是使彈幕不可見。

第二種:直接終結(jié)定時(shí)任務(wù),并移除所有彈幕

下面timers是我們?cè)O(shè)置的一個(gè)全局定時(shí)任務(wù)隊(duì)列。

$(".clear").on("click", function () {
    for(var i=0;i

這種就是比較簡(jiǎn)單粗暴了,直接終結(jié)了所有定時(shí)任務(wù),然后移除了所有彈幕。

以上兩種,大家可根據(jù)自己的需求去選擇。

最終完整版JS代碼
// 彈幕定時(shí)器
var timers = [];
// 控制彈幕顯隱變量
var isShow = true;
// 監(jiān)聽發(fā)送按鈕
$(".send").on("click", function () {
    // 創(chuàng)建彈幕
    var jqueryDom = createScreenbullet($("#screenBulletText").val());
    // 添加定時(shí)任務(wù)
    addInterval(jqueryDom);
});
// 監(jiān)聽關(guān)閉彈幕按鈕
$(".clear").on("click", function () {
    if (isShow) {
        $(".bullet").css("opacity", 0);
        isShow = false;
    } else {
        $(".bullet").css("opacity", 1);
        isShow = true;
    }   
});
// 新建一個(gè)彈幕
function createScreenbullet(text) {
    var jqueryDom = $("
" + text + "
"); var fontColor = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random()) + ")"; var fontSize = Math.floor((Math.random() + 1) * 24) + "px"; var left = $(".screen_container").width() + "px"; var top = Math.floor(Math.random() * 400) + "px"; top = parseInt(top) > 352 ? "352px" : top; jqueryDom.css({ "position": "absolute", "color": fontColor, "font-size": fontSize, "left": left, "top": top }); $(".screen_container").append(jqueryDom); return jqueryDom; } // 為彈幕添加定時(shí)任務(wù) function addInterval(jqueryDom) { var left = jqueryDom.offset().left - $(".screen_container").offset().left; var timer = setInterval(function () { left--; jqueryDom.css("left", left + "px"); if (jqueryDom.offset().left + jqueryDom.width() < $(".screen_container").offset().left) { jqueryDom.remove(); clearInterval(timer); } }, 10); timers.push(timer); }
最終效果圖

快給自己刷波666666吧!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83703.html

相關(guān)文章

  • 【小案例】基于色鍵技術(shù)的純客戶端實(shí)時(shí)蒙版彈幕

    摘要:組件提供了一系列的操作接口以方便用戶對(duì)彈幕的相關(guān)特性進(jìn)行定制。對(duì)于這種類型的圖像,我們可以使用色鍵的方式進(jìn)行摳圖生成蒙版。其中,用于更新蒙版的接口為。 導(dǎo)讀:本文內(nèi)容是筆者最近實(shí)現(xiàn)的 web 端彈幕組件—— Barrage UI 的一個(gè)延伸。在閱讀本文的實(shí)例和相關(guān)代碼之前,不妨先瀏覽項(xiàng)目文檔,對(duì)組件的使用方式和相關(guān)接口進(jìn)行了解。 各位童鞋如果經(jīng)常上 B 站(bilibili.com) ...

    muzhuyu 評(píng)論0 收藏0
  • JS彈幕實(shí)現(xiàn)

    摘要:原文鏈接實(shí)現(xiàn)原理設(shè)置展示彈幕元素位置屬性為動(dòng)態(tài)創(chuàng)建彈幕元素,位置屬性設(shè)置,為展示寬度隨機(jī)設(shè)置彈幕元素值隨機(jī)產(chǎn)生彈幕元素移動(dòng)速率,修改值隨機(jī)顏色第一種實(shí)現(xiàn)第二種實(shí)現(xiàn)第三種實(shí)現(xiàn)隨機(jī)速率代碼發(fā)送彈幕前端框架測(cè)試彈幕效果效果 基于直播平臺(tái)的流行,利用原生實(shí)現(xiàn)一下彈幕效果。 原文鏈接 實(shí)現(xiàn)原理 1、設(shè)置展示彈幕元素位置屬性為relative2、動(dòng)態(tài)創(chuàng)建彈幕元素,位置屬性設(shè)置absolute,le...

    susheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<