改动了一下逻辑,球多的时候比较卡

改动了一下逻辑,球多的时候比较卡

这样子,当小球比较多的时候,特别卡,是怎么回事,求老师帮忙分析一下

在这里输入代码

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<style>

    body{

        background-color#222;

        overflowhidden;

    }

    .ball{

        /* background-color: red; */

        positionabsolute;

        border-radius50%;

    }

</style>

<body>

<script>

    // 鼠标滑动产生小球

    function Ball(xy){

        // x, y 是小球的圆心

        this.x = x;

        this.y = y;

        // 小球的半径

        this.r = 20;

        // 小球的颜色

        this.color = colorArr[parseInt(Math.random() * colorArr.length)];

        // 小球的透明度

        this.opacity = 1

        // 小球移动的速度

        do {

            this.dX = parseInt(Math.random() * 20) - 10;

            this.dY = parseInt(Math.random() * 20) - 10;

        } while (this.dX == 0 && this.dY == 0)

        this.init()

        this.update()

        // BallArr.push(this)

    }

    Ball.prototype.init = function(){

        // console.log(1)

        this.dom = document.createElement('div')

        this.dom.className = 'ball'

        this.dom.style.backgroundColor = this.color

        // this.dom.style.opacity = 1

        this.dom.style.width = this.r * 2 + 'px'

        this.dom.style.height = this.r * 2 + 'px'

        this.dom.style.left = this.x - this.r + 'px'

        this.dom.style.top = this.y - this.r + 'px'

        document.body.appendChild(this.dom)

    }

    Ball.prototype.update = function(){

        var self = this

       

        this.timer = setInterval(function(){

            console.log(1)

            self.x -= self.dX;

            self.y -= self.dY;

            self.opacity -= 0.01

            self.dom.style.opacity = self.opacity;

            self.dom.style.left = self.x - self.r + 'px'

            self.dom.style.top = self.y - self.r + 'px'

            document.body.appendChild(self.dom)

            if (self.dom.style.opacity < 0) {

                document.body.removeChild(self.dom)

                clearInterval(self.timer)

            }

                

        }, 20)

    }

    // var BallArr = []

     // 初始颜色数组

    var colorArr = ['#66CCCC''#CCFF66''#FF99CC''#FF6666'

    '#CC3399''#FF6600'];


     // 鼠标指针的监听

     document.onmousemove = function (e) {

        // 得到鼠标指针的位置

        var x = e.clientX;

        var y = e.clientY;

        new Ball(xy);

    };

</script>

</body>

</html>

,可通过选择【代码语言】突出显示

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕夭夭 2020-12-14 19:32:21

同学你好,老师这边测试,动画是正常的,没有出现卡顿情况:


http://img1.sycdn.imooc.com//climg/5fd74cf10a521a5719120814.jpg

同学使用的什么浏览器测试的,是不是浏览器卡,导致渲染的比较卡呢?可以换其他浏览器试一试,例如谷歌浏览器。

祝学习愉快!

  • 提问者 Jest #1

    你用的是我发的代码吗,我知道什么原因啦,那样写确实会卡

    2020-12-24 22:24:44
  • 好帮手慕糖 回复 提问者 Jest #2

    同学你好,是用同学的代码测试的哦,老师又测试了下,的确是卡。可能是之前老师测试的球比较小,就不太卡。

    同学是知道原因解决了吗?能自己解决很棒哦,也可以跟大家分享下解决思路哦。

    祝学习愉快~

    2020-12-25 14:34:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师