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

这篇具有很好参考价值的文章主要介绍了vue2和elementUI 打造落日余晖登录页和滑块校验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

前言

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

1 项目搭建

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

vue create login-admin

构建后的项目,删掉了原始的helloworld组件,最终目标结构如下:
vue2和elementUI 打造落日余晖登录页和滑块校验

2 依赖引入

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

由于项目是基于vue2的,故vue-router不能使用4.x版本,后面会有问题,在文末说了。
vue2和elementUI 打造落日余晖登录页和滑块校验

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+ 会报错,故换版本

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

② 背景图存在白边

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

vue2和elementUI 打造落日余晖登录页和滑块校验文章来源地址https://www.toymoban.com/news/detail-451415.html

到了这里,关于vue2和elementUI 打造落日余晖登录页和滑块校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图书商城项目练习①管理后台Vue2/ElementUI

    本系列文章是为学习Vue的项目练习笔记,尽量详细记录一下一个完整项目的开发过程。面向初学者,本人也是初学者,搬砖技术还不成熟。项目在技术上前端为主,包含一些后端代码,从基础的数据库(Sqlite)、到后端服务Node.js(Express),再到Web端的Vue,包含服务端、管理

    2024年02月11日
    浏览(79)
  • 表单验证 ---- 在Vue2中使用ElementUI进行表单验证

    目录 前言 给表单绑定对应属性 在data中定义数据对象和表单的定义规则 与数据对象双向绑定 对整个表单进行验证 在做项目时,对于表单进行验证是我们必不可少的 例如 搭建一个基本的登录界面 表单嵌套一般都是   el-form el-form-item el-input  进行验证前,我们需要先 对el-

    2024年01月20日
    浏览(42)
  • vue2 ElementUI 表单标签、表格表头添加问号图标提示

    使用element-ui有时候需要对表格的 表头 、表单的 标签 进行自定义,添加问号的悬浮提示。 要达到的效果,如图所示: https://element.eleme.cn/#/zh-CN/component/tooltip 定义问号图标,图标上方显示tooltip提示内容 代码: 实现效果: 为什么不写content属性和里面的提示内容也能显示?

    2024年01月25日
    浏览(51)
  • 使用videjs+vue2+elementui自定义播放器控件

    videojs依赖: npm install --save-dev video.js elementui依赖(这个图方便就不按需引入了): npm i element-ui -S 增加以下几行: 在components文件夹下创建两个组件videoComponent和videoPlayer—— videoComponent挂载到App组件上 videoPlayer挂载到videoComponent上 先把两个组件最基本的结构搭好 videoComponen

    2023年04月08日
    浏览(44)
  • 《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线

    使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色,问题就出现了!! 仔细看原来是两层,默认背景色是 白色 。 想着把背景色改为 透明 应该能用,结果发现背面是一条实线,难怪要用白色遮挡…不符合我的需求… 那就仿一个吧( Vue 组件)~ 。先看效果,上为

    2024年02月04日
    浏览(39)
  • Node+MySQL+Vue2.0+elementUI实现的博客管理系统(一)

    前端部分: Vue项目的入口文件main.js: 路由文件router.js 登录页面: 项目主页: left:

    2024年02月16日
    浏览(46)
  • elementui el-table表格实现翻页和搜索均保持勾选状态(后端分页)

    需求: 不管是页面切换还是通过搜索获取数据,都要保持已选中的行保持勾选状态,同时将选中行的内容以标签的形式显示出来,当点击关闭标签时可以对应取消选中状态,点击行中的任意位置也可以切换选中状态,单独勾选复选框一样可以达到要求。 由于需求相对还是蛮

    2024年02月10日
    浏览(63)
  • vue2:elementUI中Form 表单在特定情况下做动态rules添加删除

    先看需求: (不想看的直接拉到最后)  【需求说明】 6、如状态为上架时,库存为必填,下架状态时,库存为可填,前面无星号 实现方法:使用this.$set()和this.$delete() 上代码: 由于设计商业隐私,代码只上传一部分:   表单data中原来的rules: 不添加上下架状态的rules 在

    2023年04月08日
    浏览(42)
  • vue2 Elementui 树形组件怎么实现多选并获取选中节点的node对象

    一.前言 树形组件是我们经常用到的组件,主要场景就是:公司后台管理的部门管理,做文章目录等。 二.常用的几种方法及说明 1.node-click:节点被点击时的回调 共三个参数,依次为:传递给  data  属性的数组中该节点所对应的对象、 节点对应的 Node 、节点组件本身。 2.c

    2024年02月16日
    浏览(46)
  • vue去掉所有输入框两边空格,封装指令去空格,支持Vue2和Vue3,ElementUI Input去空格

    就是页面很多表单输入框,期望在提交的时候,都要把用户两边的空格去掉 ❌使用 vue 的指令 .trim 去掉空格 中间会输入不了空格, 比如我想输入 你好啊 中国 , 这中间的空格输入不了,只能变成 你好啊中国 ❌在提交的时候使用 trim() 方法去两边空格 需要一个个字段的添加,

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包