jQuery实现评论弹幕、弹幕漂浮、滚动代码

1、html代码和jquery代码:

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title>document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0, minimun-scale=1.0,user-scalable=no;">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no">
    <script type="text/javascript" src="js/auto_rem.js"></script>
    <link rel="stylesheet" href="css/style.css" />
</head>

<body>
    <header class="fixed top-nav">
        <a class="back"></a>
        <span class="title">公屏</span>
        <a class="home"></a>
    </header>
    <div class="gp-body">
        <div class="main-box">
            <ul class="all-list">
            </ul>
        </div>
        <div class="fixed send-ms flex">
            <div class="ipt s_txt flex1" contenteditable="true"></div>
            <span class="btn s_btn">发送</span>
        </div>
    </div>
</body>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    //发表评论
    $.getJSON(‘./js/test.json‘, function(result) {
        actFn($(‘.all-list‘), result)
    })

    function actFn(tar, data) {
        var data = data;

        function startTranslate() {  //循环插入每个要被遍历循环的item html 评论
            var key = 0;
            var leng = data.length;
            var time = setInterval(function() {
                if (key >= leng) {
                    clearInterval(time);  //如果data数据没有了就不在插入
                    return;
                };
                var _html = itemHtml(data[key].img_src, data[key].grade, data[key].words)
                key++;
                tar.append(_html);
                init_screen();
            }, 400);
        }
        startTranslate()
        $(".s_btn").click(function() {  //和上面类似,擦别是点击触发插入item html
            var text = $(".s_txt").html();
            if (text == ‘‘) return;
            var _html = itemHtml(‘./img/heads.png‘, ‘最强王者‘, text)
            tar.prepend(_html);
            $(".s_txt").html(‘‘);
            init_screen();
        });

        function itemHtml(img, grade, words) {  //插入内容的模板,也就是每条评论的模板
            var _html = "<li class=‘item‘>" +
                "<span class=‘img-box‘>" +
                "<img src=‘" + img + "‘ alt=‘‘>" +
                "</span>" +
                "<p class=‘para‘>" +
                "<em class=‘grade‘>" + grade + "</em>" +
                "<span class=‘words‘>" + words + "</span>" +
                "</p>" +
                "</li>";
            return _html;
        }

        var initTop = 20;
        var _top = initTop;

        function init_screen() {
            tar.find("li[class!=‘had‘]").show().each(function(item, key) {
                if ($(this).hasClass(‘had‘)) return;
                var that = this;
                var twidth = $(this).width();
                var _left = $(window).width() + twidth;
                var rd = Math.random() * 100;
                var rdColor = getRandomColor();
                var _height = $(window).height();
                var time = 20000;
                if (_top > _height - 150) {  //如果快到屏幕底部就重新设置top,这样就从屏幕头部开始动作
                    if (initTop == 20) {
                        _top = initTop = 60;   //至于分成2种情况是为了,第一排和第二排错开,这样可以争取空间,不容易重叠(指的是评论item)
                    } else {
                        _top = initTop = 20;
                    }
                }

                $(this).find(‘.grade‘).css({
                    color: rdColor
                })
                $(this).css({  //初始化每条评论的位置,也就是看不到的位置,right位置在屏幕看不到的地方
                    top: _top,
                    right: "-" + twidth + "px"
                });
                $(this).css({  //这里实现的重点方法是translateX,利用css3实现评论的移动,这样可以提高性能,如果用其他方法比如jq的animate方法在pc端没 问题,在移动端就性能不好,会有卡顿的现象
                    transform: "translateX(-" + (_left + rd + 200) + "px)"
                }).addClass(‘had‘);
                _top = _top + 80;
            });
        }

        //随机获取颜色值
        function getRandomColor() {
            return ‘#‘ + (function(h) {
                return new Array(7 - h.length).join("0") + h
            })((Math.random() * 0x1000000 << 0).toString(16))
        }
    }
});

//初始化弹幕
</script>

</html>

2、scss代码:

.gp-body {
    @extend .main;
    width: 100%;
    height: 100%;
    .main-box {
        background: url("../img/gp-bg.jpg") no-repeat;
        background-size: 100% 100%;
        height: 100%;
        width: 100%;
        overflow: hidden;
        overflow-y: scroll;
        .all-list {
            position: relative;
        }
        .item {
            display: inline-block;
            position: absolute;
            top: 0;
            right: -100%;
            display: none;
            transition: transform 12s ease-in-out;  //css设置移动的时间及表现
            ;

            .para {
                color: white;
                font-size: 14px;
                line-height: 37px;
                display: inline-block;
                overflow: hidden;
                border-radius: 20px;
                background: rgba(0, 0, 0, 0.6);
                padding: 0 10px;
                max-width: 400px;
                white-space: nowrap;
                text-overflow: ellipsis;
                .grade {
                    margin-right: 3px;
                }
            }
            .img-box {
                float: left;
                img {
                    width: 35px;
                    height: 35px;
                    border-radius: 100%;
                    margin-right: 5px;
                }
            }
        }
    }
}

评论弹幕的主要思想是重看不到的屏幕位置移动到屏幕看到的位置,最后消失,所以需要移动,这里采用的是css3 的translate 方法,可以实现目标的移动而在移动端不卡顿。

至于每条屏幕的飘移过程中之间的位置关系需要良好的设置,比如间隔时间插入每条评论,这样就会在垂直位置上错开,还有就是top位置的关系上的调节等,比如奇数排设置top20,偶数排设置60,这样又可以错开水平方面的每条评论的位置。如下的错开:

以下是最终效果图:

以下是demo数据:

[{
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "荣耀黄金",
    "words": "灯笼裤飞机失控打飞机"
}, {
    "img_src": "./img/heads.png",
    "grade": "最强王者",
    "words": "灯笼裤飞机失控打飞机last"
}]
时间: 2024-08-06 11:52:52

jQuery实现评论弹幕、弹幕漂浮、滚动代码的相关文章

利用jQuery实现输入文字弹幕显示动画特效

特效描述:利用jQuery实现 输入文字 弹幕显示 动画特效,利用jQuery实现输入文字弹幕显示动画特效 代码结构 引入JS <script src="js/jquery-3.0.0.min.js"></script> HTML代码 <div class="barrager"><div><span>我的女神</span></div><div><span>温婉

jquery文字垂直滚动代码实例

jquery文字垂直滚动代码实例: 文字垂直滚动效果在大量网站都有应用,尤其在新闻公告或者新闻列表之类形式的功能结构中出现. 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>蚂

css+jQuery制作的文字循环滚动代码

css+jQuery制作的文字循环滚动代码,尺寸只需要在css中调整即可,另外别忘记在function里面修改相关参数 百度网盘下载

jQuery星级评论表单美化代码

最近正在做php第二阶段的项目,由于我们小组做的是游戏评论网站,所以需要用到评分评论的页面,这里我做了个星级评论表单 1.首先,我们需要引入一个jQuery文件,代码如下: 1 /*! 2 * jQuery JavaScript Library v1.5.1 3 * http://jquery.com/ 4 * 5 * Copyright 2011, John Resig 6 * Dual licensed under the MIT or GPL Version 2 licenses. 7 *

jquery图片无缝滚动代码左右 上下无缝滚动图片

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

jquery跟随屏幕滚动代码

我们在很多网站看到,当我们滚动网页时,网页内的广告或某个小区域并不会消失,而是浮动在屏幕的某个地方,特别是一些局域广告.那么这是怎么实现的呢?本文将引用乌徒帮的跟随屏幕滚动代码,对此效果做详解. 一.原始代码 下面是乌徒帮的跟随屏幕滚动代码,它的作用域为乌徒帮网页两侧的边栏,以及双击屏幕后的右侧隐藏栏. var $catalogueOffsetTop = $('aside#catalogue').offset().top;var $archiveOffestTop = $('aside#arch

jQuery实现的div垂直水平居中实例代码

jQuery实现的div垂直水平居中实例代码:在窗口中有一个div元素,下面就介绍一下如何使用jQuery将其设置为水平垂直居中对齐,希望能够给需要的朋友带来一定的帮助.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&quo

jQuery防京东浮动网站楼层导航代码

jQuery防京东浮动网站楼层导航代码 <!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title>jQuery防京

微信小程序开发之视频播放器 弹幕 弹幕颜色自定义

把录音的模块尝试过之后就想着微信小程序的视频播放会不会更有趣? 果然,微信小程序视频自带弹幕.是不是很爽,跟我一起来看看. 微信小程序开发之录音机 音频播放 动画 (真机可用) 先上gif: 再上几张图: 1.视频播放器 2.选择弹幕颜色 3.弹幕来了... 1.视频播放器 微信已经封装的非常好.我这里只用了很简单的几个属性 由于以前没做过弹幕,看到danmu-list就激动了.而且只需要将弹幕内容加入集合即可. 弹幕列表的元素: { text: '第 1s 出现的红色弹幕',//文本 colo

JS带关闭按钮的网页漂浮广告代码

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>带关闭按钮的网页漂浮广告代码</title> </head> <body> <div id="img" style="position: absolute; left: