花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 228|回复: 7

分享一个CSS+JS下雨特效

[复制链接]
  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2022-1-26 21:32 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    本帖最后由 马黑黑 于 2022-1-26 21:44 编辑

    刚刚封装了一个在某开源社区看到的CSS+JS的下雨特效,作者是FatMan,我简单做些改装与分离,以便能应用于论坛帖子。
    使用方法:

    <link rel="stylesheet" href="https://638183.freep.cn/638183/qd/rain.css" />
    <!-- 帖子代码开始 -->
    <div id="rain"></div>
    <!-- 帖子代码结束 -->  
    <!-- 这里是 JS 代码 -->

    JS代码这里运行不了外部封装的。完整JS代码如下:

    <script language="javascript">

    let clientWidth;
    let clientHeight;
    window.onload = function onload(){

            let rain = document.getElementById('rain');
            clientWidth = document.body.clientWidth;
            clientHeight = document.body.clientHeight;

            function dorpRain(){
                    setTimeout(() => {
                            if(typeof clientWidth !== 'undefined' && null !== clientWidth){
                                    let el = document.createElement('div');
                                    el.setAttribute('class', 'raindrop');
                                    let left = parseInt(Math.random() * clientWidth, 10) + 'px';
                                    el.style.left = left;
                                    rain.appendChild(el);
                                    let time = parseInt(Math.random() * 350, 10);
                                    setTimeout(() => {
                                            rain.removeChild(el);
                                            let newEl = document.createElement('div');
                                            newEl.setAttribute('class', 'ripple');
                                            newEl.style.left = left;
                                            newEl.style.top = parseInt(clientHeight / 100 * 50 + (time / 350 * (clientHeight / 100 * 50)), 10) + 'px';
                                            rain.appendChild(newEl);
                                            setTimeout(() => {
                                                    rain.removeChild(newEl);
                                            }, 600)
                                    }, 400 + time, 10)
                            }
                            dorpRain();
                    }, parseInt(10 + Math.random() * 10, 10))
            }
            dorpRain();
    }

    function debounce(fn, wait, context){
            let timer = null;
            return function() {
                    timer ? clearTimeout(timer) : '';
                            timer = setTimeout(() => {
                            fn.apply(context, arguments);
                             }, wait)
            }
    }

            function onresize(event) {
                    clientWidth = document.body.clientWidth;
                    clientHeight = document.body.clientHeight;
            }

    window.addEventListener("resize", debounce(onresize, 200, null))

    </script>

    可以将 id 为 rain 的 div (下称rain),也就是下雨的场地,作为帖子的父窗体,它的定位设定时 relative,居中,可以重新定义,还可以修改尺寸、大小、背景色等等。rain 的下雨效果是全景的,但可大可小,由使用者设定尺寸。改变 rain 场地属性的方法:

    <div id="rain" style="background: #444;width:800px;height:460px;"></div>

    当然,如果愿意,也可在 <link ... /> 语句之后重新用CSS页内嵌入方法定义 #rain 的属性,但不建议做太复杂的定义,尺寸、具体定位、背景色等就好。

    另外,请确保web也代码中没有其他地方使用 rain 做 id 标识。

    效果可看下楼。


    评分

    参与人数 1威望 +50 金钱 +100 经验 +50 收起 理由
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2022-1-26 21:35 | 显示全部楼层
    本帖最后由 马黑黑 于 2022-1-26 21:41 编辑

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2022-1-26 21:40 | 显示全部楼层
    dz不让运行外部 JS ,只能全代码加入
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2022-1-26 21:46 | 显示全部楼层
    效果还是达不到要求,估计与dz对JS的相关限制有关。感兴趣的朋友请在本地尝试一下如下完整代码:

    <link rel="stylesheet" href="https://638183.freep.cn/638183/qd/rain.css">
    <div id="rain" style="margin: auto; width: 700px; height: 400px;"></div>
    <script language="javascript" src="https://638183.freep.cn/638183/qd/rain.js"></script>
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-11-17 10:56
  • 签到天数: 1050 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2022-1-26 21:54 | 显示全部楼层
    马黑黑 发表于 2022-1-26 21:46
    效果还是达不到要求,估计与dz对JS的相关限制有关。感兴趣的朋友请在本地尝试一下如下完整代码:

    怎么尝试,就直接用这句就可以了?我试试去。。。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-11-17 10:56
  • 签到天数: 1050 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2022-1-26 21:58 | 显示全部楼层
    马黑黑 发表于 2022-1-26 21:46
    效果还是达不到要求,估计与dz对JS的相关限制有关。感兴趣的朋友请在本地尝试一下如下完整代码:

    看到了,而且还有地面的涟漪。论坛里的好像看不到落在地上的涟漪啊。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2022-1-26 22:50 | 显示全部楼层
    红影 发表于 2022-1-26 21:58
    看到了,而且还有地面的涟漪。论坛里的好像看不到落在地上的涟漪啊。

    嗯,查了一下资料,这是Window.onlod冲突问题。dz用很多封装的JS,里面肯定用到了Window.onload事件,这个事件只能用一次
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2022-1-26 22:50 | 显示全部楼层
    红影 发表于 2022-1-26 21:54
    怎么尝试,就直接用这句就可以了?我试试去。。。

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-11-30 15:52 , Processed in 0.069253 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表