婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5 canvas實現的靜態循環滾動播放彈幕

HTML5 canvas實現的靜態循環滾動播放彈幕

熱門標簽:通遼地圖標注app 威海語音外呼系統平臺 智能語音電銷機器人客戶端 江西ai電銷機器人如何 中國地圖標注城市的 地圖標注沿海城市房價 高德地圖標注廁所 西安金倫外呼系統 地圖標注員工作內容

本文主要介紹了HTML5 canvas實現的靜態循環滾動播放彈幕,分享給大家,具體如下:

使用方法和API

語法如下:

canvasBarrage(canvas, data);

其中:

canvas

canvas 表示我們的 <canvas> 畫布元素,可以直接是DOM元素,也可以是 <canvas> 畫布元素的選擇器。

data

data 表示彈幕數據,是一個數組。例如下面:

[{
    value: '彈幕1',
    color: 'blue',
    range: [0, 0.5]
}, {
    value: '彈幕2',
    color: 'red',
    range: [0.5, 1]
}]

可以看到數組中的每一個值表示一個彈幕的信息對象。其中 value 表示彈幕的文字內容; color 表示彈幕描邊的顏色(彈幕文字本身默認是白色); range 表示彈幕在畫布中的區域范圍,例如 [0, 0.5] 表示彈幕在畫布中的上半區域顯示, [0.5, 1] 表示彈幕在畫布中的下半區域顯示。

然后就可以看到無限滾動的彈幕效果了。

補充說明:

  • 此彈幕效果默認文字大小是 28px ,并且文字加粗,如果這個效果不符合您的需求,需要在 canvasBarrage() 方法中修改源代碼。因為本來就是個簡單靜態效果,因此沒有專門設計成API。
  • 此彈幕效果默認是白色文字加可變顏色描邊,同樣的,如果這個效果不符合您的需求,需要在 canvasBarrage() 方法中修改源代碼。
  • 跟真實的彈幕效果有所不同,這里的彈幕出現的速度和時機不是基于特定時間,而是隨機產生。所以看到有些文字好像開飛機,而有些文字好像坐著拖拉機。因為是死數據,這樣設計會看上去更真實寫。

源代碼:

<style>
    .video-x {
        position: relative;
        width: 640px;
        margin: auto;
    }

    .canvas-barrage {
        position: absolute;
        width: 640px;
        height: 360px;
    }
    .video-placeholder {
        height: 360px;
        background-color: #000;
        animation: bgColor 10s infinite alternate;
    }
    @keyframes bgColor {
        25% {
            background-color: darkred;
        }
        50% {
            background-color: darkgreen;
        }
        75% {
            background-color: darkblue;
        }
        100% {
            background-color: sliver;
        }
    }
    </style>
    
    <div class="video-x">
        <canvas id="canvasBarrage" class="canvas-barrage"></canvas>
        <div class="video-placeholder"></div>
    </div>
    
    <script>
        // 彈幕數據
        var dataBarrage = [{
            value: '使用的是靜態死數據',
            color: 'blue',
            range: [0, 0.5]
        }, {
            value: '隨機循環播放',
            color: 'blue',
            range: [0, 0.6]
        }, {
            value: '可以控制區域和垂直分布范圍',
            color: 'blue',
            range: [0, 0.5]
        }, {
            value: '字體大小和速度在方法內設置',
            color: 'black',
            range: [0.1, 1]
        }, {
            value: '適合用在一些靜態頁面上',
            color: 'black',
            range: [0.2, 1]
        }, {
            value: '基于canvas實現',
            color: 'black',
            range: [0.2, 0.9]
        }, {
            value: '因此IE9+瀏覽器才支持',
            color: 'black',
            range: [0.2, 1]
        }, {
            value: '可以設置邊框顏色',
            color: 'black',
            range: [0.2, 1]
        }, {
            value: '文字顏色默認都是白色',
            color: 'black',
            range: [0.2, 0.9]
        }, {
            value: '若文字顏色不想白色',
            color: 'black',
            range: [0.2, 1]
        }, {
            value: '需要自己調整下JS',
            color: 'black',
            range: [0.6, 0.7]
        }, {
            value: '如果需要的是真實和視頻交互的彈幕',
            color: 'black',
            range: [0.2, 1]
        }, {
            value: '可以回到原文',
            color: 'black',
            range: [0, 0.9]
        }, {
            value: '查看另外一個demo',
            color: 'black',
            range: [0.7, 1]
        }, {
            value: '下面就是占位彈幕了',
            color: 'black',
            range: [0.7, 0.95]
        }, {
            value: '前方高能預警!!!',
            color: 'orange',
            range: [0.5, 0.8]
        }, {
            value: '前方高能預警!!!',
            color: 'orange',
            range: [0.5, 0.9]
        }, {
            value: '前方高能預警!!!',
            color: 'orange',
            range: [0, 1]
        }, {
            value: '前方高能預警!!!',
            color: 'orange',
            range: [0, 1]
        }];

        // 彈幕方法
        var canvasBarrage = function (canvas, data) {
            if (!canvas || !data || !data.length) {
                return;
            }
            if (typeof canvas == 'string') {
                canvas = document.querySelector(canvas);
                canvasBarrage(canvas, data);
                return;
            }
            var context = canvas.getContext('2d');
            canvas.width = canvas.clientWidth;
            canvas.height = canvas.clientHeight;

            // 存儲實例
            var store = {};

            // 字號大小
            var fontSize = 28;

            // 實例方法
            var Barrage = function (obj, index) {
                // 隨機x坐標也就是橫坐標,對于y縱坐標,以及變化量moveX
                this.x = (1 + index * 0.1 / Math.random()) * canvas.width;
                this.y = obj.range[0] * canvas.height + (obj.range[1] - obj.range[0]) * canvas.height * Math.random() + 36;
                if (this.y < fontSize) {
                    this.y = fontSize;
                } else if (this.y > canvas.height - fontSize) {
                    this.y = canvas.height - fontSize;
                }
                this.moveX = 1 + Math.random() * 3;

                this.opacity = 0.8 + 0.2 * Math.random();
                this.params = obj;

                this.draw = function () {
                    var params = this.params;
                    // 根據此時x位置繪制文本
                    context.strokeStyle = params.color;
                    context.font = 'bold ' + fontSize + 'px "microsoft yahei", sans-serif';
                    context.fillStyle = 'rgba(255,255,255,' + this.opacity + ')';
                    context.fillText(params.value, this.x, this.y);
                    context.strokeText(params.value, this.x, this.y);
                };
            };

            data.forEach(function (obj, index) {
                store[index] = new Barrage(obj, index);
            });

            // 繪制彈幕文本
            var draw = function () {
                for (var index in store) {
                    var barrage = store[index];
                    // 位置變化
                    barrage.x -= barrage.moveX;
                    if (barrage.x < -1 * canvas.width * 1.5) {
                        // 移動到畫布外部時候從左側開始繼續位移
                        barrage.x = (1 + index * 0.1 / Math.random()) * canvas.width;
                        barrage.y = (barrage.params.range[0] + (barrage.params.range[1] - barrage.params.range[0]) * Math.random()) * canvas.height;
                        if (barrage.y < fontSize) {
                            barrage.y = fontSize;
                        } else if (barrage.y > canvas.height - fontSize) {
                            barrage.y = canvas.height - fontSize;
                        }
                        barrage.moveX = 1 + Math.random() * 3;
                    }
                    // 根據新位置繪制圓圈圈
                    store[index].draw();
                }
            };

            // 畫布渲染
            var render = function () {
                // 清除畫布
                context.clearRect(0, 0, canvas.width, canvas.height);

                // 繪制畫布上所有的圓圈圈
                draw();

                // 繼續渲染
                requestAnimationFrame(render);
            };

            render();
        };

        canvasBarrage('#canvasBarrage', dataBarrage);
    </script>

到此這篇關于HTML5 canvas實現的靜態循環滾動播放彈幕的文章就介紹到這了,更多相關canvas靜態循環彈幕內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:青海 眉山 北海 阜陽 晉中 崇左 營口 河池

巨人網絡通訊聲明:本文標題《HTML5 canvas實現的靜態循環滾動播放彈幕》,本文關鍵詞  HTML5,canvas,實現,的,靜態,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5 canvas實現的靜態循環滾動播放彈幕》相關的同類信息!
  • 本頁收集關于HTML5 canvas實現的靜態循環滾動播放彈幕的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品国产伦一区二区三区观看体验 | 久久精品人人做| 国产乱妇无码大片在线观看| 亚洲精品精品亚洲| 日韩久久精品一区| 成人综合婷婷国产精品久久| 亚洲制服丝袜av| 不卡av在线免费观看| 性做久久久久久免费观看| 日韩欧美久久久| 91麻豆国产香蕉久久精品| 日韩高清欧美激情| 亚洲第一福利视频在线| 精品国产一区二区三区不卡| 欧美日韩一区二区不卡| 麻豆精品国产传媒mv男同| 亚洲一区二区3| 亚洲综合偷拍欧美一区色| 国产精品久久免费看| 久久亚洲精华国产精华液| 欧美日韩一区二区欧美激情| 成人午夜视频福利| 国产精品538一区二区在线| 精品一区二区在线观看| 国产一区二区91| 国产乱码精品一区二区三区忘忧草| 午夜精品123| 国产尤物一区二区在线| 亚洲免费成人av| 老色鬼精品视频在线观看播放| 婷婷成人综合网| 秋霞影院一区二区| 精品中文字幕一区二区| 成人手机在线视频| 色乱码一区二区三区88| 91精品国产高清一区二区三区蜜臀| 91精品国产欧美一区二区| 26uuu成人网一区二区三区| 一区二区三区在线观看国产| 国内精品第一页| 日韩有码一区二区三区| 91在线一区二区| 国产精品天干天干在线综合| 天堂蜜桃91精品| 欧美日韩综合色| 亚洲欧美二区三区| 国产xxx精品视频大全| 欧美不卡123| 人妖欧美一区二区| 日韩欧美激情一区| 国产乱码精品一区二区三区忘忧草 | 老司机精品视频导航| 成人免费看片app下载| 在线看国产一区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 日韩中文字幕不卡| 欧美一区二区三区四区在线观看| 国产精品福利在线播放| 不卡电影一区二区三区| 国产亚洲一区字幕| 国产综合一区二区| 久久久电影一区二区三区| 国产成人免费视频网站| 国产精品国产三级国产专播品爱网 | 国产精品国产馆在线真实露脸 | 国产成人福利片| 精品久久久久久最新网址| 国内外成人在线| 久久精品免费观看| 蜜桃av噜噜一区| 精品亚洲成a人| 麻豆精品在线视频| 美洲天堂一区二卡三卡四卡视频| 日韩精品专区在线影院观看| 9191久久久久久久久久久| 一道本成人在线| 精品国产一区二区亚洲人成毛片| 国产精品美女一区二区| 偷偷要91色婷婷| 国内精品免费**视频| 亚洲国产精品激情在线观看| 成人免费在线观看入口| 日韩一区中文字幕| 免费人成黄页网站在线一区二区| 亚洲自拍另类综合| gogo大胆日本视频一区| 欧美自拍丝袜亚洲| 精品国精品自拍自在线| 五月婷婷激情综合网| 色综合久久88色综合天天6| 国产亚洲一二三区| 麻豆成人91精品二区三区| 国产乱码精品1区2区3区| 在线观看日韩毛片| 欧美日韩欧美一区二区| 欧美大胆人体bbbb| 一区二区在线观看视频在线观看| 久久99精品国产麻豆婷婷| 精品日韩一区二区三区| 亚洲影院理伦片| 五月综合激情婷婷六月色窝| 在线免费观看视频一区| 久久亚洲捆绑美女| 亚洲成av人**亚洲成av**| 欧美人与禽zozo性伦| 日韩一级大片在线观看| 日韩和欧美的一区| 一区二区在线观看视频在线观看| 在线播放日韩导航| 风间由美一区二区av101 | 日韩亚洲欧美综合| 国产福利精品一区| 国产夫妻精品视频| 国产精品区一区二区三区| 国产偷国产偷精品高清尤物| 欧美剧情电影在线观看完整版免费励志电影| 国产91露脸合集magnet| 国产一区欧美二区| 精品一区二区在线免费观看| 天天操天天干天天综合网| 欧美日韩日日夜夜| 国产精品一区不卡| 国产·精品毛片| 国内偷窥港台综合视频在线播放| 中文字幕在线不卡视频| 久久99最新地址| 欧美性淫爽ww久久久久无| 国产精品蜜臀在线观看| 精一区二区三区| 亚洲男人都懂的| 国产精品色婷婷久久58| 久久在线观看免费| 亚洲欧美另类小说视频| 奇米综合一区二区三区精品视频 | 风间由美一区二区av101| 精品一区在线看| 成人av在线观| 精品国产1区二区| 亚洲丰满少妇videoshd| 丁香激情综合五月| 91精品国产综合久久精品| 欧美剧情电影在线观看完整版免费励志电影| 国产不卡免费视频| 2017欧美狠狠色| 午夜精品aaa| 成人av网站在线观看免费| 69av一区二区三区| 欧美韩日一区二区三区四区| 一本色道久久综合亚洲精品按摩| 欧美一区二区三区在线观看视频| 自拍偷拍亚洲欧美日韩| 成人免费高清在线| 亚洲精品在线三区| 久久精品国产**网站演员| 日本视频中文字幕一区二区三区| 成人白浆超碰人人人人| 精品国产乱码久久久久久夜甘婷婷| 午夜国产精品一区| 欧美日韩久久久久久| 日韩视频免费直播| 日韩高清一级片| 久久午夜电影网| 风间由美一区二区av101| 日韩毛片精品高清免费| 色综合久久久网| 成人国产精品视频| 国产欧美日韩不卡| 欧美精三区欧美精三区| 国产乱码一区二区三区| 亚洲欧美在线另类| 麻豆国产欧美日韩综合精品二区 | 欧美精品免费视频| 久久久无码精品亚洲日韩按摩| 亚洲a一区二区| 99riav久久精品riav| 中文字幕不卡在线观看| 欧美三级中文字幕在线观看| 午夜精品福利在线| 日韩欧美成人一区二区| 国产欧美精品国产国产专区| 欧美视频在线一区二区三区| 国精产品一区一区三区mba桃花| 亚洲一区二区三区在线看| 欧美激情一区在线观看| 亚洲成av人**亚洲成av**| 紧缚奴在线一区二区三区| 91在线小视频| 亚洲激情中文1区| 国产91精品久久久久久久网曝门| 在线一区二区视频| 国产精品卡一卡二卡三| 国产黄色精品视频| 亚洲男帅同性gay1069| 久久蜜臀精品av| 一区二区三区四区五区视频在线观看 | 日韩欧美区一区二| 91精品在线麻豆| 日韩欧美成人午夜| 欧美日韩一区二区三区高清| 91国在线观看|