一般般好看的登录页面 (vue)

没有ui,无奈只能自己上手设计页面。自己写了一个,半仿照其他demo写的,原demo很炫酷,我这个不炫酷也不丑吧

贴图:

(星星每隔3秒改变颜色,有动画运动)

贴代码:

  1 <template>
  2   <div id="login">
  3     <div id="bgd">
  4       <canvas
  5         id='myCanvas'
  6         :width='width'
  7         :height='height'
  8       >
  9       </canvas>
 10     </div>
 11     <div id="loginBox">
 12       <h4>登录</h4>
 13       <el-form
 14         :model="loginForm"
 15         :rules="loginRules"
 16         ref="loginForm"
 17         label-width="0px"
 18       >
 19         <el-form-item
 20           label=""
 21           prop="userName"
 22           style="margin-top:40px;"
 23         >
 24           <el-row>
 25             <el-col :span='2'>
 26               <span class="iconfont">&#xe654;</span>
 27             </el-col>
 28             <el-col :span='22'>
 29               <el-input
 30                 class="inps"
 31                 placeholder='用户名'
 32                 v-model="loginForm.userName"
 33               ></el-input>
 34             </el-col>
 35           </el-row>
 36         </el-form-item>
 37         <el-form-item
 38           label=""
 39           prop="passWord"
 40         >
 41           <el-row>
 42             <el-col :span='2'>
 43               <span class="iconfont">&#xe616;</span>
 44             </el-col>
 45             <el-col :span='22'>
 46               <el-input
 47                 class="inps"
 48                 placeholder='密码'
 49                 v-model="loginForm.passWord"
 50               ></el-input>
 51             </el-col>
 52           </el-row>
 53         </el-form-item>
 54         <el-form-item style="margin-top:55px;">
 55           <el-button
 56             type="primary"
 57             round
 58             class="submitBtn"
 59             @click="submitForm"
 60           >登录</el-button>
 61         </el-form-item>
 62       </el-form>
 63     </div>
 64   </div>
 65 </template>
 66 
 67 <script>
 68 export default {
 69   data() {
 70     return {
 71       canvas: null,
 72       context: null,
 73       stars: [], //星星数组
 74       shadowColorList: [
 75         "#39f",
 76         "#ec5707",
 77         "#b031d4",
 78         "#22e6c7",
 79         "#92d819",
 80         "#14d7f1",
 81         "#e23c66"
 82       ], //阴影颜色列表
 83       directionList: ["leftTop", "leftBottom", "rightTop", "rightBottom"], //星星运行方向
 84       speed: 50, //星星运行速度
 85       last_star_created_time: new Date(), //上次重绘星星时间
 86       Ball: class Ball {
 87         constructor(radius) {
 88           this.x = 0;
 89           this.y = 0;
 90           this.radius = radius;
 91           this.color = "";
 92           this.shadowColor = "";
 93           this.direction = "";
 94         }
 95 
 96         draw(context) {
 97           context.save();
 98           context.translate(this.x, this.y);
 99           context.lineWidth = this.lineWidth;
100           var my_gradient = context.createLinearGradient(0, 0, 0, 8);
101           my_gradient.addColorStop(0, this.color);
102           my_gradient.addColorStop(1, this.shadowColor);
103           context.fillStyle = my_gradient;
104           context.beginPath();
105           context.arc(0, 0, this.radius, 0, Math.PI * 2, true);
106           context.closePath();
107 
108           context.shadowColor = this.shadowColor;
109           context.shadowOffsetX = 0;
110           context.shadowOffsetY = 0;
111           context.shadowBlur = 10;
112 
113           context.fill();
114           context.restore();
115         }
116       }, //工厂模式定义Ball类
117        window.innerWidth,
118       height: window.innerHeight,
119       loginForm: {
120         userName: "",
121         passWord: ""
122       },
123       loginRules: {
124         userName: [
125           { required: true, message: "请输入用户名", trigger: "blur" }
126         ],
127         passWord: [{ required: true, message: "请输入密码", trigger: "blur" }]
128       }
129     };
130   },
131   methods: {
132     //提交登录
133     submitForm() {},
134     //重复动画
135     drawFrame() {
136       let animation = requestAnimationFrame(this.drawFrame);
137       this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
138       this.createStar(false);
139       this.stars.forEach(this.moveStar);
140     },
141     //展示所有的星星
142     createStar(params) {
143       let now = new Date();
144       if (params) {
145         //初始化星星
146         for (var i = 0; i < 50; i++) {
147           const radius = Math.random() * 3 + 2;
148           let star = new this.Ball(radius);
149           star.x = Math.random() * this.canvas.width + 1;
150           star.y = Math.random() * this.canvas.height + 1;
151           star.color = "#ffffff";
152           star.shadowColor = this.shadowColorList[
153             Math.floor(Math.random() * this.shadowColorList.length)
154           ];
155           star.direction = this.directionList[
156             Math.floor(Math.random() * this.directionList.length)
157           ];
158           this.stars.push(star);
159         }
160       } else if (!params && now - this.last_star_created_time > 3000) {
161         //每隔3秒重绘修改颜色其中30个球阴影颜色
162         for (var i = 0; i < 30; i++) {
163           this.stars[i].shadowColor = this.shadowColorList[
164             Math.floor(Math.random() * this.shadowColorList.length)
165           ];
166         }
167         this.last_star_created_time = now;
168       }
169     },
170     //移动
171     moveStar(star, index) {
172       if (star.y - this.canvas.height > 0) {
173         //触底
174         if (Math.floor(Math.random() * 2) === 1) {
175           star.direction = "leftTop";
176         } else {
177           star.direction = "rightTop";
178         }
179       } else if (star.y < 2) {
180         //触顶
181         if (Math.floor(Math.random() * 2) === 1) {
182           star.direction = "rightBottom";
183         } else {
184           star.direction = "leftBottom";
185         }
186       } else if (star.x < 2) {
187         //左边
188         if (Math.floor(Math.random() * 2) === 1) {
189           star.direction = "rightTop";
190         } else {
191           star.direction = "rightBottom";
192         }
193       } else if (star.x - this.canvas.width > 0) {
194         //右边
195         if (Math.floor(Math.random() * 2) === 1) {
196           star.direction = "leftBottom";
197         } else {
198           star.direction = "leftTop";
199         }
200       }
201       if (star.direction === "leftTop") {
202         star.y -= star.radius / this.speed;
203         star.x -= star.radius / this.speed;
204       } else if (star.direction === "rightBottom") {
205         star.y += star.radius / this.speed;
206         star.x += star.radius / this.speed;
207       } else if (star.direction === "leftBottom") {
208         star.y += star.radius / this.speed;
209         star.x -= star.radius / this.speed;
210       } else if (star.direction === "rightTop") {
211         star.y -= star.radius / this.speed;
212         star.x += star.radius / this.speed;
213       }
214       star.draw(this.context);
215     }
216   },
217   mounted() {
218     this.canvas = document.getElementById("myCanvas");
219     this.context = this.canvas.getContext("2d");
220 
221     this.createStar(true);
222     this.drawFrame();
223   }
224 };
225 </script>
226 
227 <style lang='less' scoped>
228 #login {
229   width: 100vw;
230   padding: 0;
231   margin: 0;
232   height: 100vh;
233   font-size: 16px;
234   background-repeat: no-repeat;
235   background-position: left top;
236   background-color: #242645;
237   color: #fff;
238   font-family: "Source Sans Pro";
239   background-size: 100%;
240   background-image: url("../../../static/images/Starry.jpg");
241   position: relative;
242   #bgd {
243     height: 100vh;
244     width: 100vw;
245     overflow: hidden;
246   }
247   #loginBox {
248     width: 240px;
249     height: 280px;
250     position: absolute;
251     top: 0;
252     left: 0;
253     right: 0;
254     bottom: 0;
255     margin: auto;
256     padding: 50px 40px 40px 40px;
257     box-shadow: -15px 15px 15px rgba(6, 17, 47, 0.7);
258     opacity: 1;
259     background: linear-gradient(
260       230deg,
261       rgba(53, 57, 74, 0) 0%,
262       rgb(0, 0, 0) 100%
263     );
264     /deep/ .inps input {
265       border: none;
266       color: #fff;
267       background-color: transparent;
268       font-size: 12px;
269     }
270     .submitBtn {
271       background-color: transparent;
272       color: #39f;
273       width: 200px;
274     }
275     .iconfont {
276       color: #fff;
277     }
278   }
279 }
280 </style>

贴背景图,要的自取:

最后,贴上大神原demo网站地址:http://www.jq22.com/yanshi15518

原文地址:https://www.cnblogs.com/anu0823/p/11326162.html