一个努力奋斗的人 發表於 2020-2-6 07:44:00

html、css、javascript 实现红包雨

<p><strong>先看看效果吧!</strong></p>
<p><strong><img src="https://img2018.cnblogs.com/common/1543983/202002/1543983-20200206080357150-1653696339.gif"></strong></p>
<p><strong>HTML代码:</strong></p>
<div class="cnblogs_code">
<pre>&lt;div id="wrapper"&gt;
    &lt;img src="images/hb/petal1.png" &gt;
&lt;/div&gt;<br>&lt;div id="modol"&gt;
    &lt;div id="hb"&gt;
      &lt;div id="text"&gt;&lt;/div&gt;
      &lt;div id="btn"&gt;继续抢红包&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
</div>
<p><strong>CSS代码:</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">* </span>{<span style="color: rgba(255, 0, 0, 1)">
    padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;
}<span style="color: rgba(128, 0, 0, 1)">
body </span>{<span style="color: rgba(255, 0, 0, 1)">
    background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #fb9d3b</span>;<span style="color: rgba(255, 0, 0, 1)">
    overflow</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
    animation各参数意思
    关键帧动画名称
    动画执行时间
    动画延迟时间
    动画执行次数
    动画的执行速度函数
    动画执行方向alternate间隔的顺序 ( 0 到 100 到 0 到 100 )
               reverse    反向运动   (100 到 0 )
               reverse-alternate   反向间隔运动
    动画执行模式forwards(动画停止在最后一个关键帧的位置)
               backwards (动画第一个关键帧立即执行)
               both(两者都 即立即作用第一个关键帧也停止在最后一个关键帧)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
#wrapper img </span>{<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
    transform</span>:<span style="color: rgba(0, 0, 255, 1)"> translateY(-100%)</span>;      <span style="color: rgba(0, 128, 0, 1)">/*下落动画*/</span><span style="color: rgba(255, 0, 0, 1)">
    animation</span>:<span style="color: rgba(0, 0, 255, 1)"> dropDowm 3s forwards</span>;   <span style="color: rgba(0, 128, 0, 1)">/*旋转动画*/</span>
}<span style="color: rgba(128, 0, 0, 1)">
@keyframes dropDowm</span>{<span style="color: rgba(255, 0, 0, 1)">
    0% {
      top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
      transform</span>:<span style="color: rgba(0, 0, 255, 1)"> translateY(-100%) rotate(0deg)</span>;   
    }<span style="color: rgba(128, 0, 0, 1)">
    100% </span>{<span style="color: rgba(255, 0, 0, 1)">
      top</span>:<span style="color: rgba(0, 0, 255, 1)"> 110%</span>;<span style="color: rgba(255, 0, 0, 1)">
      transform</span>:<span style="color: rgba(0, 0, 255, 1)"> translateY(0%) rotate(360deg)</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}

#modol </span>{<span style="color: rgba(255, 0, 0, 1)">
    display</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;
}<span style="color: rgba(128, 0, 0, 1)">

#modol::before </span>{<span style="color: rgba(255, 0, 0, 1)">
    content</span>:<span style="color: rgba(0, 0, 255, 1)"> ''</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> fixed</span>;<span style="color: rgba(255, 0, 0, 1)">
    top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    right</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> rgba(0,0,0, 0.5)</span>;
}<span style="color: rgba(128, 0, 0, 1)">

#hb </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 350px</span>;<span style="color: rgba(255, 0, 0, 1)">
    height</span>:<span style="color: rgba(0, 0, 255, 1)"> 450px</span>;<span style="color: rgba(255, 0, 0, 1)">
    border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;<span style="color: rgba(255, 0, 0, 1)">
    background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #e7223e</span>;<span style="color: rgba(255, 0, 0, 1)">
    color</span>:<span style="color: rgba(0, 0, 255, 1)"> #fad755</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> fixed</span>;<span style="color: rgba(255, 0, 0, 1)">
    left</span>:<span style="color: rgba(0, 0, 255, 1)"> 50%</span>;<span style="color: rgba(255, 0, 0, 1)">
    top</span>:<span style="color: rgba(0, 0, 255, 1)"> 50%</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> -225px</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> -175px</span>;<span style="color: rgba(255, 0, 0, 1)">
    font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 30px</span>;<span style="color: rgba(255, 0, 0, 1)">
    font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> 900</span>;<span style="color: rgba(255, 0, 0, 1)">
    display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
    flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
    justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
    align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;
}<span style="color: rgba(128, 0, 0, 1)">
#btn </span>{<span style="color: rgba(255, 0, 0, 1)">
    background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #fad755</span>;<span style="color: rgba(255, 0, 0, 1)">
    color</span>:<span style="color: rgba(0, 0, 255, 1)"> #e7223e</span>;<span style="color: rgba(255, 0, 0, 1)">
    font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 18px</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;<span style="color: rgba(255, 0, 0, 1)">
    border</span>:<span style="color: rgba(0, 0, 255, 1)">none</span>;<span style="color: rgba(255, 0, 0, 1)">
    outline</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
    cursor</span>:<span style="color: rgba(0, 0, 255, 1)"> pointer</span>;
}</pre>
</div>
<p>JavaScript代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> init() {
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> dom = createDom(40<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> wrapper = document.getElementById('wrapper'<span style="color: rgba(0, 0, 0, 1)">);
    wrapper.appendChild(dom);
    bindEvent();
}
</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> totalMoney = 0<span style="color: rgba(0, 0, 0, 1)">;<span style="color: rgba(51, 153, 102, 1)"> //保存所有抢到的红包总金额
</span></span><span style="color: rgba(0, 0, 255, 1)">var</span> delayTime = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> lastImg = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;   <span style="color: rgba(51, 153, 102, 1)">//最后一张掉落的图片

</span></span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建红包结构, num代表红包个数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> createDom(num) {
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> frag = document.createDocumentFragment();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建文档碎片</span>
    <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; num; i ++<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> img = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Image();
      img.src </span>= './images/hb/petal' + ranNum(0,10) + '.png'<span style="color: rgba(0, 0, 0, 1)">;
      img.style.left </span>= ranNum(0, window.innerWidth) + 'px'<span style="color: rgba(0, 0, 0, 1)">;   <span style="color: rgba(51, 153, 102, 1)"> //让红包散列分布
      </span></span><span style="color: rgba(0, 0, 255, 1)">var</span> delay = ranNum(0,100) / 10<span style="color: rgba(0, 0, 0, 1)">;
      img.style.animationDelay </span>= delay + 's'<span style="color: rgba(0, 0, 0, 1)">;                   <span style="color: rgba(51, 153, 102, 1)">//设置红包出现时间
      </span></span><span style="color: rgba(0, 0, 255, 1)">if</span>(delayTime &lt;<span style="color: rgba(0, 0, 0, 1)"> delay) {
            delayTime </span>=<span style="color: rgba(0, 0, 0, 1)"> delay;
            lastImg </span>=<span style="color: rgba(0, 0, 0, 1)"> img;
      }
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">data-money</span>
      img.dataset.money = ranNum(0,1000) / 100<span style="color: rgba(0, 0, 0, 1)">;   <span style="color: rgba(51, 153, 102, 1)">//设置每个红包的钱数</span>
      frag.appendChild(img);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> frag;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">绑定点击事件</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> bindEvent() {
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> wrapper = document.getElementById('wrapper'<span style="color: rgba(0, 0, 0, 1)">),
      imgList </span>= document.getElementsByTagName('img'<span style="color: rgba(0, 0, 0, 1)">),
      modol </span>= document.getElementById('modol'<span style="color: rgba(0, 0, 0, 1)">),
      text </span>= document.getElementById('text'<span style="color: rgba(0, 0, 0, 1)">),
      btn </span>= document.getElementById('btn'<span style="color: rgba(0, 0, 0, 1)">);<br><br>    <span style="color: rgba(51, 153, 102, 1)">//点击红包事件</span>
    addEvent(wrapper, </span>'mousedown', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {      
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> event = e ||<span style="color: rgba(0, 0, 0, 1)"> window.event,
            target </span>= event.target ||<span style="color: rgba(0, 0, 0, 1)"> event.srcElement,
            money </span>=<span style="color: rgba(0, 0, 0, 1)"> event.target.dataset.money;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(money) {
            text.innerText </span>= '恭喜抢到红包' + money + '元'<span style="color: rgba(0, 0, 0, 1)">;
            </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0, len = imgList.length; i &lt; len; i ++<span style="color: rgba(0, 0, 0, 1)">) {
                imgList.style.animationPlayState </span>= 'paused'<span style="color: rgba(0, 0, 0, 1)">;
            }
            modol.style.display </span>= 'block'<span style="color: rgba(0, 0, 0, 1)">;
            totalMoney </span>+=<span style="color: rgba(0, 0, 0, 1)"> Number(money);
      }
    });<br><br>    <span style="color: rgba(51, 153, 102, 1)">//点击继续抢红包按钮事件</span>
    addEvent(btn, </span>'click', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
      modol.style.display </span>= 'none'<span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0, len = imgList.length; i &lt; len; i ++<span style="color: rgba(0, 0, 0, 1)">) {
            imgList.style.animationPlayState </span>= 'running'<span style="color: rgba(0, 0, 0, 1)">;
      }
    });<br><br>  <span style="color: rgba(51, 153, 102, 1)">//监听最后一个红包动画完成</span>
    addEvent(lastImg, </span>'webkitAnimationEnd', <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
      modol.style.display </span>= 'block'<span style="color: rgba(0, 0, 0, 1)">;
      text.innerText </span>= '恭喜总共抢到了' + totalMoney.toFixed(2) + '元'<span style="color: rgba(0, 0, 0, 1)">;
      btn.style.display </span>= 'none'<span style="color: rgba(0, 0, 0, 1)">;
    });
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">min 到 max 之间的随机数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> ranNum(min, max) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> Math.ceil(Math.random()*(max - min) +<span style="color: rgba(0, 0, 0, 1)"> min);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">兼容的 添加事件函数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> addEvent(elem, type, handle) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (elem.addEventListener) {
      elem.addEventListener(type, handle, </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (elem.attachEvent) {
      elem.attachEvent(</span>'on' + type, <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
            handle.call(elem);
      })
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      elem[</span>'on' + type] =<span style="color: rgba(0, 0, 0, 1)"> handle;
    }
}

</span>
<span style="color: rgba(0, 0, 0, 1)">

init();</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong><span style="color: rgba(255, 153, 204, 1)">*:ஐ٩(๑´ᵕ`)۶ஐ:*</span> </strong></span><span style="font-size: 18px">学习使我进步</span></p>
<p><span style="font-size: 18px">欢迎留言讨论哦!</span></p>
<p>&nbsp;<img src="https://common.cnblogs.com/images/loading.gif"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/hjysunshine/p/12267560.html
頁: [1]
查看完整版本: html、css、javascript 实现红包雨