vue3页面内容切换(类似登录、注册内容切换)

一、内容描述

        页面有俩块内容,分别是验证码登录页面内容,账号密码登录页面内容。有俩种处理方式,一个是写俩个页面跳转使用,还有一种是一个页面俩个内容,切换的只是不同的内容,相同的内容保留。一般都是选择后者。

 二、基本思路

将标题以数组的方式循环渲染出来,这样我就可以拿到对应的index值,后面有用。

const loginitems = ref([
  {
    id: 1,
    text: "验证码",
  },
  {
    id: 2,
    text: "账号密码",
  },
]);
<div
            class="login-item"
            v-for="(item, index) in loginitems"
            :key="item.id"
            :class="current === index ? 'move' : ''"
            @click="change(index)"
          >
            {{ item.text }}
          </div>

用一个标识标记当前选中的是哪个,默认是第一个。

// 标识是哪个登录
const current = ref(0);

内容区域根据标识的值显示对应内容就行了!

选中样式使用动态绑定,判断当前的标记值current和index是否一样。 一样绑定上去,使用三元运算符判断就行了。

:class="current === index ? 'move' : ''"
.move {
  color: #f5b90f;
  padding-bottom: 5px;
  font-weight: 600;
  border-bottom: 2px solid #f5b90f;
}

点击某一项的时候,根据点击事件修改current的值。

// 切换验证码登录和账号密码登录
const change = (index) => {
  current.value = index;
};

不算很难,且容易理解!

三、完整示例代码

<template>
  <!-- 登录页面 -->
  <div class="container">
    <div class="main">
      <div class="head">
        <img src="../src/assets/static/image/demo.png" alt="" />
        <div class="title">智慧物业管理平台</div>
      </div>
      <!-- 登录内容区域 -->
      <div class="login">
        <div class="login-options">
          <div
            class="login-item"
            v-for="(item, index) in loginitems"
            :key="item.id"
            :class="current === index ? 'move' : ''"
            @click="change(index)"
          >
            {{ item.text }}
          </div>
        </div>
        <div class="con">
          <div class="con-item" v-if="current == 0">
            <div class="input-items">
              <input
                type="text"
                v-model="phonevalue"
                placeholder="输入手机号"
              />
            </div>
            <div class="input-items">
              <input type="text" v-model="codevalue" placeholder="输入验证码" />
              <div class="getcode" @click="getcode">
                <p v-if="isok == 1">获取验证码</p>
                <p v-else>{{ countTime }}</p>
              </div>
            </div>
            <div class="login-btn" @click="login">登录</div>
          </div>
          <div class="con-item" v-if="current == 1">
            <div class="input-items">
              <input
                type="text"
                v-model="phonevalue"
                placeholder="输入手机号"
              />
            </div>
            <el-input
              v-model="passwordinput"
              style="height: 41px; border: 0; outline: none"
              type="password"
              placeholder="输入密码"
              show-password
            />
            <div class="reset" @click="gotoforgetPassword">重置密码></div>
            <div class="login-btn" @click="login">登录</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { useRouter, useRoute } from "vue-router";
// 登录方式
const loginitems = ref([
  {
    id: 1,
    text: "验证码",
  },
  {
    id: 2,
    text: "账号密码",
  },
]);
const countTime = ref(60);
const isok = ref(1);
const phonevalue = ref("");
const codevalue = ref("");
const passwordinput = ref("");

const router = useRouter();

// 获取验证码倒计时
const getcode = () => {
  isok.value = 0;
  var Timer = setInterval(() => {
    countTime.value--;
    if (countTime.value <= 0) {
      clearInterval(Timer);
      isok.value = 1;
      countTime.value = 60;
    }
  }, 1000);
};
// 标识是哪个登录
const current = ref(0);

// 切换验证码登录和账号密码登录
const change = (index) => {
  current.value = index;
};
// 忘记密码按钮
const gotoforgetPassword = () => {
  router.push({
    path: "/forgetPassword",
  });
};
// 登录进去首页
const login = () => {
  router.push({
    path: "/notice",
  });
};
</script>

<style scoped>
.container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}
.main {
  display: flex;
  align-items: center;
  flex-direction: column;
}
.head {
  display: flex;
  align-items: center;
  flex-direction: column;
}
.head .title {
  font-size: 22px;
  font-weight: 600;
}
.head img {
  width: 300px;
  height: 200px;
}
.move {
  color: #f5b90f;
  padding-bottom: 5px;
  font-weight: 600;
  border-bottom: 2px solid #f5b90f;
}
.login-options {
  margin: 20px 0 10px 0;
  display: flex;
  align-items: center;
}
.login {
  width: 300px;
  display: flex;
  flex-direction: column;
}
.login-item {
  box-sizing: border-box;
  padding-bottom: 5px;
  margin-right: 10px;
}
.input-items {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 5px;
  height: 40px;
  margin: 10px 0;
}
input {
  padding-left: 10px;
  outline: none;
  padding-right: 10px;
  border: 0;
  font-size: 14px;
}
.getcode {
  margin-right: 5px;
}
.con-item {
  position: relative;
}
.getcode p {
  width: 80px;
  height: 25px;
  text-align: center;
  background-color: #f5b90f;
  color: #fff;
  font-size: 12px;
  line-height: 25px;
  border-radius: 5px;
  cursor: pointer;
}
.login-btn {
  width: 100%;
  height: 30px;
  border-radius: 5px;
  text-align: center;
  line-height: 30px;
  color: #fff;
  margin: 45px 0;
  background-color: #f5b90f;
  cursor: pointer;
}
.reset {
  position: absolute;
  right: 0;
  color: #f5b90f;
  font-size: 12px;
  margin: 10px 0;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)

本文主要讲解的是音频基础概念、交叉编译原理和实践&#xff08;LAME的交叉编译&#xff09;&#xff0c;是基于Android平台&#xff0c;示例代码如下所示&#xff1a; AndroidAudioDemo 音频基础概念 在进行音频开发的之前&#xff0c;了解声学的基础还是很有必要的。 声音…

Windows安装SSH教程

Windows安装SSH教程 一、SSH1.SSH简介2.SSH功能3.SSH验证3.1 第一种级别&#xff08;基于口令的安全验证&#xff09;3.2 第二种级别&#xff08;基于密匙的安全验证&#xff09; 4.SSH层次4.1 传输层协议 [SSH-TRANS]4.2 用户认证协议 [SSH-USERAUTH]4.3 连接协议 [SSH-CONNEC…

改造muduo,不依赖boost,用C++11重构

组件的实现 1. 序 1.1. 总述 muduo库是基于多Reactor-多线程模型实现的TCP网络编程库&#xff0c;性能良好。如libev作者&#xff1a;“One loop per thread is usually a good model”&#xff0c;muduo库的作者陈硕在其《Linux多线程服务端编程》中也力荐这种“One loop pe…

linux中对信号的认识

信号的概念与相关知识认识 信号是向目标进程发送消息通知的的一种机制。 信号可以以异步的方式发送给进程&#xff0c;也就是说&#xff0c;进程无需主动等待&#xff0c;而是在任何时间都可以接收到信号。 信号的种类 用kill-l命令查看系统定义的信号列表&#xff1a; 前台…

初识Hive

官网地址为&#xff1a; Design - Apache Hive - Apache Software Foundation 一、架构 先来看下官网给的图&#xff1a; 图上显示了Hive的主要组件及其与Hadoop的交互。Hive的主要组件有&#xff1a; UI&#xff1a; 用户向系统提交查询和其他操作的用户界面。截至2011年&…

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网&#xff1a;https://maven.apache.org/download.cgi 打开 maven 的官网下载页面&#xff0c;点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven&#xff0c;则点击 Maven…

【短时交通流量预测】基于GRNN神经网络

课题名称&#xff1a;基于GRNN神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#x…

Python类 __init__() 是一个特殊的方法

设计者&#xff1a;ISDF工软未来 版本&#xff1a;v1.0 日期&#xff1a;2024/3/5__init__() 是一个特殊的方法 类似c# C的构造函数 两头都包含两个下划线&#xff0c;这是约定&#xff0c;用于与普通的函数保持区分class User:用户类def __init__(self,first_name,last_name):…

软件应用,财务收支系统试用版操作教程,佳易王记录账单的软件系统

软件应用&#xff0c;财务收支系统试用版操作教程&#xff0c;佳易王记录账单的软件系统 一、前言 以下软件操作教程以 佳易王账单记账统计管理系统V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;统计报表包含 收支汇…

JavaScript基础2之运算符、函数

JavaScript基础 运算符一元操作符递增/递减一元加和减 布尔操作符逻辑非逻辑与逻辑或 乘性操作符乘法操作符除法操作符取模操作符 加性操作符加法操作符减法操作符 比较操作符相等操作符关系操作符 函数函数声明函数表达式箭头函数函数的实参和形参arguments 默认参数参数的拓展…

QUIC来了!

什么是QUIC QUIC&#xff0c;快速UDP网络连接(Quick UDP Internet Connection)的简称&#xff0c;即RFC文档描述它为一个面向连接的安全通用传输协议。其基于UDP协议实现了可靠传输及拥塞控制&#xff0c;简单来说&#xff0c;QUIC TCP TLS。 为什么有了QUIC HTTP2.0为了为了…

如何处理微服务之间的通信和数据一致性?

✨✨祝屏幕前的兄弟姐妹们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、微服务通信 1、同步通信&#xff1a;HTTP 1.1.同步通信示例代码&#xf…

第四十九回 吴学究双掌连环计 宋公明三打祝家庄-Python与HTTP服务交互

吴用请戴宗从梁山请来铁面孔目裴宣、圣手书生萧让、通臂猿侯健、玉臂匠金大坚来帮忙。又告诫扈家庄的扈成&#xff0c;打起来不要去帮祝家庄。 孙立把旗号改成“登州兵马提辖孙立”&#xff0c;来祝家庄找峦廷玉&#xff0c;被热情接待。 第三天&#xff0c;宋江派小李广花荣…

Vue 路由功能

安装路由 npm install vue-router4创建路由器并导出 //导入vue-router import { createRouter, createWebHistory } from vue-router //导入组件 import LoginVue from /views/Login.vue import LayoutVue from /views/Layout.vue//定义路由关系 const routes [{ path: /log…

安卓玩机工具推荐----ADB状态读写分区 备份分区 恢复分区 查看分区号 工具操作解析

在以往玩机过程中。很多机型备份分区 备份固件需要借助adb手动指令或者第三方手机软件或者特定的一些工具来操作。有些朋友需要查看当前机型分区名称和对应的分区号。此类操作我前面的博文专门说过对应的adb指令。但有些界面化的工具比较方便简单。 相关分区同类博文&#xff…

WPF中如何设置自定义控件(二)

前一篇文章中简要讲解了圆角按钮、圆形按钮的使用,以及在windows.resource和app.resource中设置圆角或圆形按钮的样式。 这篇主要讲解Polygon(多边形)、Ellipse(椭圆)、Path(路径)这三个内容。 Polygon 我们先看一下的源码: namespace System.Windows.Shapes { pu…

性能问题分析排查思路之机器(3)

本文是性能问题分析排查思路的展开内容之一&#xff0c;第2篇&#xff0c;主要分为日志1期&#xff0c;机器4期、环境2期共7篇系列文章&#xff0c;本期是第三篇&#xff0c;讲机器&#xff08;硬件&#xff09;的网络方面的排查方法和最佳实践。 主要内容如图所示&#xff1a…

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

【计算机学习】-- 电脑的组装和外设

系列文章目录 文章目录 系列文章目录前言一、电脑的组装1.CPU2.主板3.显卡4.硬盘5.内存6.散热器7.电源8.机箱 二、电脑外设选用1.显示器2.鼠标3.键盘4.音响 总结 前言 一、电脑的组装 1.CPU 返回目录 认识CPU CPU&#xff0c;即中央处理器&#xff0c;负责电脑资源的调度安…

器件选型【电容,电阻篇】

电阻篇&#xff1a; 一句话先做总结&#xff1a;电阻的选型主要考虑额定电压和过流能力&#xff08;基于封装大小&#xff09; 电阻封装规格越大功率越大。但其功率也与温度有关&#xff0c;如果温度超过 70℃&#xff0c;其额定功率是会下降的。并且&#xff0c;R01005 和 R0…