欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于JavaScript實(shí)現(xiàn)粒子流動(dòng)效果

 更新時(shí)間:2023年09月08日 10:39:44   作者:愛(ài)吃糖的小明  
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)JavaScript實(shí)現(xiàn)粒子流動(dòng)效果,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

這是一個(gè)HTML文件,主要包含了一些CSS樣式和JavaScript代碼,用于創(chuàng)建一個(gè)動(dòng)畫(huà)效果。

在CSS部分,定義了一些基本的樣式,包括頁(yè)面的背景顏色、位置、大小等。特別的,定義了兩種球形元素(.ball_A 和 .ball_B)的樣式,以及它們的動(dòng)畫(huà)效果。

在JavaScript部分,定義了一個(gè)名為Ball的類(lèi),用于創(chuàng)建球形元素,并控制它們的運(yùn)動(dòng)。Ball類(lèi)有一些方法,如random用于生成隨機(jī)數(shù),render用于渲染球形元素,update用于更新球形元素的位置。

在頁(yè)面加載時(shí),會(huì)調(diào)用creatBall函數(shù)創(chuàng)建一系列的球形元素,并將它們添加到頁(yè)面中。然后,調(diào)用render函數(shù),使這些球形元素按照預(yù)定的動(dòng)畫(huà)效果進(jìn)行運(yùn)動(dòng)。

總的來(lái)說(shuō),這個(gè)HTML文件的主要功能是創(chuàng)建一個(gè)動(dòng)畫(huà)效果,其中包含一系列的球形元素在頁(yè)面上進(jìn)行運(yùn)動(dòng)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body,html{
            width: 100%;
            height: 100%;
            background: #222;
            overflow: hidden;
            position: relative;
            --m-x:51px;
            --m-y:51px
        }
        .playground{
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            width: 600px;
            height: 300px;
            display: flex;
            justify-content: space-around;
            align-items: center;
        }
        .ball{
            width: 100px;
            height: 100px;
            border-radius: 50%;
            /*border: 1px solid #FFFFFF;*/
            position: relative;
        }
        .ball_A{
            /*border: 1px solid #a101f6;*/
            color: #FFFFFF;
            background: #a101f6;
            cursor: pointer;
            animation: scaleBall 0.5s forwards;
        }
        .ball_B{
            /*border: 1px solid #FFFFFF;*/
            color: #FFFFFF;
        }
        .ball_B1{
            border: none;
            width: 20px;
            height: 20px;
            background:#0d84ff;
            transform: scale(0);
            left: -20px;
            border-radius: 10px 30px  20px  20px  / 15px  10px  25px  25px;
            animation: transBall 0.8s 1.2s forwards;
        }
        .text{
            display: inline-block;
            width: 100px;
            line-height: 100px;
            color: white;
            text-align: center;
        }
        @keyframes scaleBall {
            0%{
                transform: scale(1.0);
            }
            100%{
                transform: scale(1.3);
                background: none;
                /*border: 1px solid #fff;*/
            }
        }
        .small-ball{
            width: 10px;
            height: 10px;
            background: #0d84ff;
            border-radius: 50%;
            position: absolute;
            /*animation: moveBall 0.5s forwards;*/
        }
        @keyframes transBall {
            0%{
                transform: scale(0);
                border-radius: 5px 10px  15px  5px  / 8px  7px  6px  15px;
            }
            50%{
                border-radius: 10px 30px  20px  20px  / 15px  10px  25px  25px;
            }
            100%{
                transform: scale(6);
                border-radius: 50px
            }
        }
    </style>
</head>
<body>
<div class="playground">
    <div class="ball ball_A">
        <span class="text">A</span>
    </div>
    <div class="ball ball_B">
        <span class="text">B</span>
    </div>
</div>
<div class="playground">
    <div class="ball" style="opacity: 0">
        <span class="text">a</span>
    </div>
    <div class="ball ball_B1">
<!--        <span class="text">B</span>-->
    </div>
</div>
<script>
    const playground = document.querySelector('.playground')
    const ctx = document.querySelector('.ball_A')
    const ctx_b = document.querySelector('.ball_B')
    const play = playground.getBoundingClientRect()
    const rect = ctx.getBoundingClientRect()
    const rect_b = ctx_b.getBoundingClientRect()
    const list = []
    const pox = {
        y: rect.height,
        x: rect.width,
        bx: rect_b.left - play.left,
        by: rect_b.top - play.top
    }
    class Ball{
        constructor(con,x,y) {
            this.x = x;
            this.y = y;
            this.width = con.x;
            this.height = con.y;
            this.ex = this.random(-20,con.x)
            this.ey = this.random(-20,con.y)
            this.dx = this.random(-5, 6); // -5~5
            this.dy = this.random(-5, 6); // -5~5
            this.dom = ''
        }
        random(min,max){
            return Math.random()* (max - min) + min;
        }
        render(index,step){
            const move = `@keyframes moveBall_${index} {
            0%{
                top:${this.y}px;
                left: ${this.x}px;
            }
            50%{
                top:${this.ey}px;
                left: ${this.ex}px;
            }
            100%{
                top:${this.y}px;
                left: ${pox.bx - 100}px;
            }
        }`
            const sheet = document.styleSheets[0];
            sheet.insertRule(move, 0)
            const div = document.createElement("div")
            div.className = 'small-ball'
            div.style.transform = `scale(${Math.random() + 0.5})`
            div.style.opacity = Math.random() + 0.5
            div.style.animation = `moveBall_${index} ${step}s cubic-bezier(0.23, 1, 0.32, 1) forwards`
            ctx.appendChild(div)
            this.dom = div
        }
    }
    creatBall()
    function creatBall(){
        let step = 2
        const x = pox.x / 2
        const y = pox.y / 2
        for (let i = 0; i< 50; i++){
            step += 0.01
            const ball = new Ball(pox,x,y)
            ball.render(i,step)
            list.push(ball)
        }
    }
</script>
</body>
</html>

到此這篇關(guān)于基于JavaScript實(shí)現(xiàn)粒子流動(dòng)效果的文章就介紹到這了,更多相關(guān)JavaScript粒子流動(dòng)效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論