目前我的想实现本身的一个项目。正好整合了vue + laravel ,尝试用下最新的技术。(本人是个PHP Coder)html
由于,一直找不到好的模板,因此我就本身打算搭一个VUE的环境配合iview写个页面。也不算写吧,只是部分排版设计是本身的。毕竟iview大部分组件已经帮你封装好了,不须要本身实现太多的组件。vue
废话,很少说。上真题~~~html5
目前,本身写好了一个登陆页的总体部分。laravel
设计以下,中间是登陆框和邀请码登陆。背景是本文的主体,滑稽雨~~~git
登陆上面,是我使用iview实现的走马灯~~~github
万一这个项目火了呢。我能够接广告了呢(人要有梦想,哈哈哈哈哈哈哈哈)~~~~~canvas
图片以下。不知道怎么发动图。。。。iview
具体说下大致实现方式吧。dom
<template> <canvas width="1325" height="943" id="canvas"></canvas> </template> <script> export default { data () { return { width: 0, //当前屏幕的宽度 height: 0, //当前屏幕的高度 canvas: {}, //画布 oGc: {}, emojiNum: 13, rainAry: [], rainNum: 150, extenstion: '.png', baseEmojiPath: '/static/images/funny_rain/' //图片路径 } }, created() { }, mounted() { //获取当前窗口的宽、高 this.watchWidth; //经过computed属性一直动态的监听当前窗口的宽度 this.watchHeight; //动态监听高度 this.initCanvas(); this.createRain(); this.move(); //todo:全局伸缩页面后,自定义的拓展画布大小,主要经过window.resize来监听实现。可是。我目前没加 }, methods: { initCanvas() { //定义画布 this.canvas = document.getElementById('canvas'); this.canvas.setAttribute('width', this.width); this.canvas.setAttribute('height', this.height); this.oGc = this.canvas.getContext('2d'); }, initRain() { let _this = this; //每一个emoji rain 是一个单独的对象 let rain = { init: function(cxt) { this.x = _this.random(0,_this.width); //随机从x轴降落 this.y = 0; //y轴 this.r = 80; //每一个emoji的大小 this.speed = _this.random(3,5); //直接绘制出对应的图片 let cur_emoji = _this.randomEmoji(1,_this.emojiNum); //随机出一张emoji let cur_emoji_path = _this.baseEmojiPath + cur_emoji + _this.extenstion; this.img = new Image(); this.img.src = cur_emoji_path; cxt.drawImage(this.img,this.x,this.y); }, draw: function(cxt) {
//这里再次绘制,主要是绘制图片的x,y坐标实现动态下落 cxt.drawImage(this.img,this.x,this.y); //画布上展现出对应的emoji this.update(cxt); }, update: function(cxt) {
// 当表情没有下落到底部,一直加速下坠 if (this.y < (_this.height - this.r)) { this.y += this.speed; } else {
//重头开始 this.init(_this.oGc); } } }; return rain; }, createRain() { //经过for循环生成总共的emoji rain for(let i = 0;i < this.rainNum;i++) { setTimeout(() => { //经过定时器,出现延迟感。 let oSnow = this.initRain(); oSnow.init(this.oGc); this.rainAry.push(oSnow); }, 100 * i); } }, move() {
//删除以前绘制的像素,不使用的话,你会发现表情下坠的时候会有不少重影 this.oGc.clearRect(0, 0, this.width, this.height); for(var i = 0; i < this.rainAry.length; i++) { this.rainAry[i].draw(this.oGc); //一次性生成好随机的表情对象,就不用一直随机生成了。 } requestAnimationFrame(this.move); //requestAnimationFrame的性能比setInternal 和setTimeOut好不少,具体请你们百度看看,这貌似是html5新出的API,我也是写这个的时候才发现的、
}, random(min,max) {
return Math.random() * (max - min) + min;
},
randomEmoji(min,max) {
return Math.floor(Math.random() * (max - min + 1) + min); }
}, computed: {
watchWidth: function() {
return this.width = window.innerWidth;
}, watchHeight: function() {
return this.height = window.innerHeight;
}
}
}
</script>
github地址:性能
https://github.com/SnailOwO/v-botTemplate
有兴趣的能够加颗星,谢谢~~~渣渣js coder ,若有什么很差的地方,能够评论交流。