vue2和elementUI 打造落日余晖登录页和滑块校验

news2025/1/18 18:58:46

文章目录

    • 前言
    • 1 项目搭建
    • 2 依赖引入
    • 3 项目调整
      • ①vue-router
      • ② App.vue
      • ③ main.js
    • 4 写登录页
    • 5 写滑块校验
    • 6 源码下载
    • 7 问题解决
      • ①项目一直报错
      • ② 背景图存在白边


在这里插入图片描述

前言

标题很夸张,实则是AI的功能,今天咱也搞一个登录页,其实满简单的一个东东,大家也都会用到,本次仅限前端,没有任何后台交互,技术vuevue-routerelement-ui,因为背景图是落日,所以就叫它落日余晖登录页
在这里插入图片描述

1 项目搭建

使用指令直接构建的,选择vue2版本

vue create login-admin

构建后的项目,删掉了原始的helloworld组件,最终目标结构如下:
在这里插入图片描述

2 依赖引入

npm install element-ui
npm install vue-router@3

由于项目是基于vue2的,故vue-router不能使用4.x版本,后面会有问题,在文末说了。
在这里插入图片描述

3 项目调整

项目构建成功后,删掉最初的helloworld组件

①vue-router

新建router/index.js文件,将我们要写的登录页路径放进去

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
    {
        path: '/',
        name: 'Login',
        component: () => import('@/views/login.vue'),
    }
]

const router = new VueRouter({
    routes
})

export default router;

② App.vue

移除掉老的App.vue中的全部内容,然后我写一个简单的router-view,让他来展示我们的login页面

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<script>
</script>
<style>

body {
  margin: 0px;
}
 
</style>

这里面的body,由于下面有小坑,所以先给margin清空了

③ main.js

简单调整,将我们写的router引进来,以及element-ui导入进来

import Vue from 'vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

import App from './App.vue'

Vue.use(ElementUI);
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')

4 写登录页

新建页面views/login.vue这就是我们的核心页面,需要跟上面router中写的路径保持一致,太长了,我就简单复制一下

<template>
  <div class="background">
    <el-form
      :rules="rules"
      ref="loginForm"
      :model="loginForm"
      class="loginContainer"
    >
      <h3 class="loginTitle">系统登录</h3>
      <el-form-item prop="username">
        <el-input
          type="text"
           prefix-icon="el-icon-user"
          v-model="loginForm.username"
          placeholder="请输入用户名"
        >
        </el-input>
      </el-form-item>
      <el-form-item prop="password">
        <el-input
          type="password"
           prefix-icon="el-icon-link"
          v-model="loginForm.password"
          placeholder="请输入密码"
        >
        </el-input>
      </el-form-item>
      <el-form-item>
        <SilderVerify ref="verify"></SilderVerify>
      </el-form-item>
      <el-checkbox v-model="checked" class="loginRemember">记住我</el-checkbox>
      <el-button type="primary" style="width: 100%" @click="submitLogin"
        >登录</el-button
      >
    </el-form>
  </div>
</template>

然后,换上我落日余晖的背景,逼格一下就上来了

.background {
  position: absolute;
  background-image: url("../assets/bg.jpg");
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
  height: 100vh; 
  width: 100%;
}

5 写滑块校验

这里直接给他封装成组件了,来自chatgpt的大力支持,新建文件 components/SilderVerify/index.vue,代码搞进去,太长了,我就简单复制一下

<template>
  <div class="drag" ref="dragDiv">
    <div class="drag_bg"></div>
    <div class="drag_text">{{ confirmWords }}</div>
    <div
      ref="moveDiv"
      @mousedown="mouseDownFn($event)"
      :class="{ handler_ok_bg: confirmSuccess }"
      class="handler handler_bg"
      style="position: absolute; top: 0px; left: 0px"
    ></div>
  </div>
</template>
<script>
export default {
  name: "SilderVerify",
  data() {
    return {
      beginClientX: 0 /*距离屏幕左端距离*/,
      mouseMoveState: false /*触发拖动状态  判断*/,
      maxWidth: "" /*拖动最大宽度,依据滑块宽度算出来的*/,
      confirmWords: "向右拖动滑块验证" /*滑块文字*/,
      confirmSuccess: false /*验证成功判断*/,
    };
  },
  methods: {
    //mousedown 事件
    mouseDownFn: function (e) {
        console.log('mouseDownFn' + e.clientX)
      if (!this.confirmSuccess) {
        e.preventDefault && e.preventDefault(); //阻止文字选中等 浏览器默认事件
        this.mouseMoveState = true;
        this.beginClientX = e.clientX;
      }
    },
    //验证成功函数
    successFunction() {
      this.confirmSuccess = true;
      this.confirmWords = "验证通过";
      if (window.addEventListener) {
        document
          .getElementsByTagName("html")[0]
          .removeEventListener("mousemove", this.mouseMoveFn);
        document
          .getElementsByTagName("html")[0]
          .removeEventListener("mouseup", this.moseUpFn);
      } else {
        document
          .getElementsByTagName("html")[0]
          .removeEventListener("mouseup", () => {});
      }
      document.getElementsByClassName("drag_text")[0].style.color = "#fff";
      document.getElementsByClassName("handler")[0].style.left =
        this.maxWidth + "px";
      document.getElementsByClassName("drag_bg")[0].style.width =
        this.maxWidth + "px";
    },
    //mousemove事件
    mouseMoveFn(e) {
      if (this.mouseMoveState) {
        let width = e.clientX - this.beginClientX;
        if (width > 0 && width <= this.maxWidth) {
          document.getElementsByClassName("handler")[0].style.left =
            width + "px";
          document.getElementsByClassName("drag_bg")[0].style.width =
            width + "px";
        } else if (width > this.maxWidth) {
          this.successFunction();
        }
      }
    },
    //mouseup事件
    moseUpFn(e) {
        console.log('moseUpFn' + e.clientX)
      this.mouseMoveState = false;
      var width = e.clientX - this.beginClientX;
      if (width < this.maxWidth) {
        document.getElementsByClassName("handler")[0].style.left = 0 + "px";
        document.getElementsByClassName("drag_bg")[0].style.width = 0 + "px";
      }
    },
  },
  mounted() {
    this.maxWidth =
      this.$refs.dragDiv.clientWidth - this.$refs.moveDiv.clientWidth;
    document
      .getElementsByTagName("html")[0]
      .addEventListener("mousemove", this.mouseMoveFn);
    document
      .getElementsByTagName("html")[0]
      .addEventListener("mouseup", this.moseUpFn);
  },
};
</script>

6 源码下载

https://download.csdn.net/download/QQ727338622/87789070

7 问题解决

①项目一直报错

解决:由于安装 vue-router 时,直接运行了 npm install vue-router 命令,造成直接下载最新版 vue-router 4.x,而 4 以后的版本适用于 vue3.0 版本,用在 vue2.0+ 会报错,故换版本

在这里插入图片描述

② 背景图存在白边

可以看见,左右都有白边,采用了最粗暴的方法,给body的样式margin:0px可以解决,上面也写到了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gigabayte-Z87-DS3H i3 4130电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Gigabayte-Z87-DS3H 处理器英特尔酷睿i3 4130 Haswell已驱动 内存4x4GB DDR3/1600Mhz金士顿已驱动 硬盘SSD 480GB PNY CS900已驱动 显卡英特尔高…

想学透OSPF,先搞懂这6个技术点再说

大家好&#xff0c;我是老杨。 OSPF&#xff0c;这玩意儿作为目前主流的IGP协议&#xff0c;主要是为了解决RIP的三大问题而出现的。 应用面非常广&#xff0c;认可度也高&#xff0c;毕竟的确是好用的。 也有很多正在学习的小友想找我讲讲&#xff0c;OSPF该怎么学。 基础的…

Beerus:基于Helios light client的Starknet Stateless Client

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 Beerus为基于Helios light client构建的Starknet Stateless Client&#xff0c;开源代码实现见&#xff1a; https://github.com/keep-starknet-strange/beerus&#xff08;Rust&#xff09…

食饮品牌如何用Social Power抓住消费者心智?

2023 Foodaily创博会 2023.05.14-2023.05.16 数说故事将深度参与Foodaily创博会&#xff08;第八届Foodaily FBIC全球食品饮料创新大会&#xff09;&#xff0c;和食饮品牌一起玩转Social Power&#xff0c;抓住消费者心智&#xff0c;用一种很新的方法营销与创新。 作为食饮…

Qt5.15.2替换mingw32-make.exe为emmake

qtcreator对qt程序的编译过程是先“qmake” &#xff0c;然后“构建&#xff08;等价于make&#xff09;”。 qtcreator右键点击项目 出现的 “执行qmake”和“构建” 两个选项其实就是运行 项目-》build->构建步骤 中的“qmake”和“make”步骤所对应的命令行命令。 从项目…

类和对象(三)

目录 前言 1.再谈构造函数 1.1 初始化列表 1.2 explicit关键字 2.static成员 2.1 概念 2.2 特性 3.友元 3.1. 友元函数 3.2 友元类 4.内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 前言 今天小编给大家介绍的就是类最后的相关内容&#xff0c;希望大家好好学习理…

僵尸进程?孤儿进程?为什么他有如此惨烈的身世...

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;认识进程状态&#x1f33a;如何查看进程状态 &#x1f337;R状态&#x1f33a;引例&#x1f33a;如何观察 &#x1f337;S状态与D状态&#x1f33a;S状态&#x1f341;如何观察 &#x1f33a;D状态 &#x1f…

【机器学习】Yellowbrick 包的理解和说明

文章目录 一、介绍二、Visualizers2.1 Classification Visualization2.2 Clustering Visualization2.3 Feature Visualization2.4 Model Selection Visualization2.5 Regression Visualization2.6 Target Visualization2.7 Text Visualization 一、介绍 首先是包的安装过程&am…

Reid strong baseline 代码详解

本项目是对Reid strong baseline代码的详解。项目暂未加入目标检测部分&#xff0c;后期会不定时更新&#xff0c;请持续关注。 本相比Reid所用数据集为Markt1501&#xff0c;支持Resnet系列作为训练的baseline网络。训练采用表征学习度量学习的方式。 目录 训练参数 训练代…

前端开发之this.$options.data的使用

前端开发之this.$options.data的使用 前言效果图vue2中使用vue3中使用 前言 this.$options.data:初始化对象 效果图 vue2中使用 this.$options这是一个Vue的特性&#xff0c;它可以让你访问组件的选项对象。你可以使用this.$options.data.call(this)来获取组件的初始数据&am…

pytorch模型转ONNX

目录 1. ONNX 2. pytorch 转 ONNX 3. 加载 ONNX 文件 4. Netron 1. ONNX 一般来说&#xff0c;pytorch训练好的模型是不能够直接用于生产环境&#xff0c;有很多的地方没有优化 而ONNX 格式可以兼顾不同框架的模型&#xff0c;相当于一个中间人的角色。这样部署到不同的环…

msvcr120.dll丢失怎样修复,学这三招就可以修复好

年前才买的新电脑&#xff0c;今天在打开软件ps软件的时候&#xff0c;电脑就提升msvcr120.dll文件丢失&#xff0c;无法执行此代码。刚刚开始以为是电脑的系统没有装好&#xff0c;经过我一下午时间的研究&#xff0c;原来是电脑msvcr120.dll文件丢失一般都是下载到垃圾软件&a…

软件测试后浪太强了,前浪有点顶不住啊,真难受...

想和大家说的话 8年前军哥刚进入到IT行业&#xff0c;现在发现学习软件测试的人越来越多&#xff0c;今天想根据军哥的行业经验再结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业&#xff0c;导致软件测试已…

证件照片如何换背景底色,3个免费制作证件照的方法,简单易学

在日常生活中&#xff0c;我们经常需要用到证件照&#xff0c;比如&#xff1a;找工作需要简历上附带有证件照&#xff0c;还有办理学生证、身份证也需要提交证件照。 不同的平台有时候提交的要求&#xff08;背景底色、大小等&#xff09;也不一样&#xff0c;如果你不想每次…

缺少dll文件怎么办?修复dll文件的多种方法

缺少dll文件怎么办&#xff1f;当您试图启动某个应用程序或游戏时&#xff0c;可能会遇到“缺少DLL文件”的错误提示。DLL文件是动态链接库文件的缩写&#xff0c;它们包含在计算机上的许多应用程序和游戏中&#xff0c;并且是确保这些应用程序和游戏正常运行的重要部分。当出现…

秒懂!项目安全问题-SM4加解密

项目安全问题一直被人们研究&#xff0c;当前端路径上通过?status这种拼接参数时&#xff0c;参数的值在浏览器路径栏上非常醒目&#xff0c;是很容易被人恶意修改的&#xff0c;比如该用户并没有编辑权限&#xff0c;但有心之人却可以通过修改参数status的值把see改成edit&am…

【DataX】将hive表数据导入ES

目录 一、环境 二、创建hive测试表 三、Es写入插件包 四、配置json 五、数据同步 1、执行命令 2、查看es结果 一、环境 DataX&#xff1a;windows安装 Es版本&#xff1a;7.9.0 二、创建hive测试表 CREATE TABLE teacher(name string,age int )row format del…

抖音未来的发展趋势|成都欢蓬信息

抖音未来的发展趋势&#xff0c;近年来随着互联网技术的发展&#xff0c;小视频app也逐渐走入大家的日常生活中&#xff0c;闲着的时候打开手机抖音APP&#xff0c;就可以刷到世界各地人们分享的视频和直播&#xff0c;下面一起看看抖音未来的发展趋势 一、抖音的现状   据权…

【 五子棋对战平台(java_gobang) 】

文章目录 一、核心功能及技术二、效果演示三、创建项目扩展&#xff1a;WebSocket 框架知识 四、需求分析和概要设计五、数据库设计与配置 Mybatis六、实现用户模块功能6.1 数据库代码编写6.2 前后端交互接口6.3 服务器开发6.4 客户端开发 七、实现匹配模块功能7.1 前后端交互接…

构建新一代智慧园区移动应用以推动数字转型

随着智慧城市的建设和智慧园区的崛起&#xff0c;智慧园区数字一体化建设成为园区发展的重心&#xff0c;当然数字转型离不开移动应用的整合服务。 在过去的几年中&#xff0c;智慧园区移动应用已经发展成为园区管理和服务的重要手段之一&#xff0c;为企业和员工提供了更加便…