导语

歌谣 歌谣 新的一年就要到了 你一定有很多想许下的愿望吧 类似于许愿墙这种的,可以实现一下吗 说时迟 这是快 就开始了许愿墙的一个制作 耗时.....不断改造...升级...当然还可以更好,其他就靠兄弟们自由发挥了

效果预览

功能要点介绍

1雪花飘落的代码是js控制的,可自行修改

2许愿墙的贴纸是for循环控制的,可自行修改

3文字是datas数组控制的,可以自行修改

代码部分

雪花逻辑部分(index.js)

class Snowflake {
  constructor() {
    this.x = 0;
    this.y = 0;
    this.vx = 0;
    this.vy = 0;
    this.radius = 0;
    this.alpha = 0;
    this.reset();
  }
  reset() {
    this.x = this.randBetween(0, window.innerWidth);
    this.y = this.randBetween(0, -window.innerHeight   672);
    this.vx = this.randBetween(-3, 3);
    this.vy = this.randBetween(2, 5);
    this.radius = this.randBetween(1, 4);
    this.alpha = this.randBetween(0.1, 0.9);
  }
  randBetween(min, max) {
    return min   Math.random() * (max - min);
  }
  update() {
    this.x  = this.vx;
    this.y  = this.vy;
    if (this.y   this.radius > window.innerHeight) {
      this.reset();
    }
  }
}
class Snow {
  constructor() {
    this.canvas = document.createElement('canvas');
    this.ctx = this.canvas.getContext('2d');
    document.body.appendChild(this.canvas);
    window.addEventListener('resize', () => this.onResize());
    this.onResize();
    this.updateBound = this.update.bind(this);
    requestAnimationFrame(this.updateBound);
    this.createSnowflakes();
  }
  onResize() {
    console.log(this.width, 'width');
    console.log(this.height, 'height');
    this.width = window.innerWidth;
    this.height = window.innerHeight;
    this.canvas.width = this.width;
    this.canvas.height = this.height   672;
  }
  createSnowflakes() {
    const flakes = window.innerWidth / 4;
    this.snowflakes = [];
    for (let s = 0; s < flakes; s  ) {
      this.snowflakes.push(new Snowflake());
    }
  }
  update() {
    this.ctx.clearRect(0, 0, this.width, this.height);
    for (let flake of this.snowflakes) {
      flake.update();
      this.ctx.save();
      this.ctx.fillStyle = '#FFF';
      this.ctx.beginPath();
      this.ctx.arc(flake.x, flake.y, flake.radius, 0, Math.PI * 2);
      this.ctx.closePath();
      this.ctx.globalAlpha = flake.alpha;
      this.ctx.fill();
      this.ctx.restore();
    }
    requestAnimationFrame(this.updateBound);
  }
}
new Snow();

逻辑文件 (script.js)

//转换时间格式
  function formatDated(date) {
    var date = new Date(date);
    var YY = date.getFullYear()   '-';
    var MM = (date.getMonth()   1 < 10 ? '0'   
(date.getMonth()   1) : date.getMonth()   1)   '-';
    var DD = (date.getDate() < 10 ? '0'  
(date.getDate()) :
date.getDate());
    var hh = (date.getHours() < 10 ? '0'   
date.getHours() : 
date.getHours())   ':';
    var mm = (date.getMinutes() < 10 ? '0'   
date.getMinutes() :
date.getMinutes())   ':';
    var ss = (date.getSeconds() < 10 ? '0'   
date.getSeconds() : date.getSeconds());
    return YY   MM   DD  " " hh   mm   ss;
}
function timeChange(){
var datas =[]
var idList=0;
var timer= setInterval(() => {
//控制文字的说明
for( i=0;i<2;i  ){
    datas.push({
        id:idList,
        name:"歌谣",
        content:" 在过往的岁月中,我遇到了形形色色的人和事情。有的人坚持,有的人放弃。有的人逆袭,有的人失败。最好的种树是十年前其次是现在。很高兴遇到你,愿你的人生多姿多彩,幸福绵绵,好事连连。歌谣很棒谢谢你的一键三连",
        time:formatDated(new Date())
    })
    }
    idList  
    console.log(idList,"idList")
   if(idList==5){
    clearInterval(timer)
   }
var content = document.getElementById("content");
var zIndex = 1;
for (var i = 0; i < datas.length; i  ) {
    var data = datas[i];
    var div = document.createElement("div");
    div.className = "tip1";
    div.id = "cc"   data.id;
    content.appendChild(div);
    //设置随机数
    let num=parseInt(Math.random()*10000)
    div.innerHTML = '<div class="tip_h" title="双击关闭纸条">'
              '<div class="num">第' num '条'  data.time   '</div>'
              '<div class="close" title="关闭纸条">×</div>'
              '<div class="clr"></div>'
              '</div>'
              '<div class="tip_c">'
              data.content
              '</div>'
              '<div class="tip_f">'
              '<div class="icon">'
              '<img src="images/bpic_1.gif" alt="" title="">'
              '</div>'
              '<div class="name">'   data.name   '</div>'
              '<div class="clr"></div>'
              '</div>';
    // 控制贴纸的位置
    var x = parseInt(Math.random() * 1500) 200;
    var y = parseInt(Math.random() * 700);
    div.style.left = x   "px";
    div.style.top = y   "px";
    div.onclick = function () {
        zIndex  ;
        this.style.zIndex = zIndex;
    };
    var closeDiv = div.children[0];
    closeDiv.ondblclick = function () {
        this.parentNode.style.display = "none";
    };
    var x = closeDiv.children[1];
    x.onclick = function () {
        this.parentNode.parentNode.style.display = "none";
    };
}
},2000)
}
window.onload = timeChange;

样式部分(style.css)

body {
    margin: 0 auto;
    padding: 0px;
    font-size: 12px;
    background: url(../images/bg.gif) repeat center 36px;
    text-align: center;
    background-color: #c30230;
}  
#content .tip1, #content .tip2, #content .tip3, #content 
.tip4, #content .tip5, #content .tip6, #content .tip7, #content .tip8 {
    position: absolute;
    width: 227px;
    left: 200px;
    top: 100px;
}
#content .tip1 .tip_h {
    background: url(../images/tip1_h.gif) no-repeat left top;
}
#content .tip1 .tip_h, #content .tip2 .tip_h, #content .tip3 .tip_h, 
#content .tip4 .tip_h, #content .tip5 .tip_h, #content .tip6 .tip_h,
 #content .tip7 .tip_h, #content .tip8 .tip_h {
    width: 227px;
    padding-top: 45px;
    height: 23px;
    text-align: left;
    cursor: move;
}
#content .tip1 .tip_c {
    background: url(../images/tip1_c.gif) repeat-y;
}
#content .tip1 .tip_c, #content .tip2 .tip_c, #content .tip3 .tip_c, 
#content .tip4 .tip_c, #content .tip5 .tip_c, #content .tip6 .tip_c,
 #content .tip7 .tip_c, #content .tip8 .tip_c {
    width: 200px;
    padding-left: 12px;
    padding-right: 15px;
    min-height: 40px;
    text-align: left;
    line-height: 20px;
    max-height: 160px;
    word-wrap: break-word;
    word-break: break-all;
    overflow: hidden;
}
#content .tip1 .tip_f {
    background: url(../images/tip1_f.gif) no-repeat left top;
}
#content .tip1 .tip_f, #content .tip2 .tip_f, #content .tip3 .tip_f,
 #content .tip4 .tip_f, #content .tip5 .tip_f, #content .tip6 .tip_f, 
#content .tip7 .tip_f, #content .tip8 .tip_f {
    width: 227px;
    height: 53px;
    padding-top: 20px;
}
#content .close, #content .close2 {
    float: left;
    font-size: 12px;
    cursor: pointer;
    color: #000000;
}
.clr {
    clear: both;
    overflow: auto;
    display: block;
    height: 0px;
}
#content .icon {
    float: left;
    width: 35px;
    padding-left: 15px;
    height: 35px;
    text-align: center;
}
#content .name {
    float: right;
    padding-right: 15px;
    text-align: right;
    font-size: 14px;
    line-height: 35px;
    color: #C0F;
}
#content .num {
    float: left;
    padding-left: 7px;
    width: 195px;
}

骨架部分(html)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>歌谣许愿墙</title>
     <link rel="stylesheet" type="text/css" href="./css/style.css" rel="external nofollow"  />
    
</head>
<body>
<div id="content">
</div>
<script  src="./js/index.js"></script>
<script  src="./js/script.js"></script>
<script>
  
 
</script>
</body>
</html>

效果演示

到此这篇关于基于JavaScript实现雪花许愿墙特效的文章就介绍到这了,更多相关JavaScript雪花许愿墙特效内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

基于JavaScript实现雪花许愿墙特效的更多相关文章

  1. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. html5简介_动力节点Java学院整理

    这篇文章主要介绍了html5简介,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,有兴趣的可以了解一下

  5. ios 8 Homescreen webapp,关闭和打开iPad停止javascript

    我有一个适用于iPad的全屏HTML5网络应用程序,并且刚刚安装了IOS8来试用它,它一切正常,直到你关闭并重新启动iPad.一旦web应用程序重新启动javascript就会停止并加载新页面不会重新启动它.在iPad上的Safari中打开同一页面时,关闭和打开iPad会继续按预期工作.其他人注意到了这个或想出了一个解决方案吗?解决方法这似乎是我在iOS8.1.1更新中解决的.

  6. iOS 6 javascript与object.defineProperty的间歇性问题

    当访问使用较新的Object.defineProperty语法定义属性的对象的属性时,有没有其他人注意到新iOS6javascript引擎中的间歇性错误/问题?https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty我正在看到javascript失败的情况,说

  7. ios – 如何使用JSExport导出内部类的方法

    解决方法似乎没有办法将内部类函数导出到javascript.我将内部类移出并创建了独立的类,它起作用了.

  8. 静音iOS推送通知与React Native应用程序在后台

    我有一个ReactNative应用程序,我试图获得一个发送到JavaScript处理程序的静默iOS推送通知.我看到的行为是AppDelegate中的didReceiveRemoteNotification函数被调用,但是我的JavaScript中的处理程序不会被调用,除非应用程序在前台,或者最近才被关闭.我很困惑的事情显然是应用程序正在被唤醒,并且它的didReceiveRemoteNotifi

  9. ios – 内存泄漏与UIWebView和Javascript

    清楚地包含一个Javascript文件到我的HTML是使UIWebView泄漏内存.当我重复使用相同的UIWebView对象时,或者每当我有内容实例化一个新的漏洞时,会出现泄漏的事实,导致我认为必须有一些JavaScript文件被loadHTMLString处理,导致泄漏.有人知道如何解决这个问题吗?

  10. iOS应用程序的UI自动化测试如何与乐器和Javascript

    从WWDC2010视频会议中了解iOS应用程序的自动化UI测试,但没有实践.从代码项目project,我们可以有一个例子.这个问题在这里听到有涉及这个的人.任何限制?解决方法我建议从AlexWollmer开始使用thisblogpost.他创建了一个非常有用的JavaScript库:tuneup_jswithtest()函数,它允许测试分离和有用的帮助者以及为自动化仪器编写测试的断言.

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部