You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何将表单切换的jQuery代码转换为原生JavaScript?

原生JavaScript实现表单切换动画

针对你的需求,我们可以用CSS过渡+原生DOM操作替代jQuery的动画逻辑,既符合学校要求,又能实现相同的切换效果,且性能更优。

1. 添加CSS过渡样式

先给表单设置过渡动画,模拟jQuery的slow(约600ms)动画效果,同时定义初始显示状态:

/* 给所有表单添加过渡基础样式 */
.form form {
  overflow: hidden; /* 隐藏超出部分,避免内容溢出 */
  opacity: 0;
  height: 0;
  /* 绑定高度和透明度的过渡动画 */
  transition: height 0.6s ease, opacity 0.6s ease;
}

/* 默认显示登录表单 */
.form .login-form {
  height: auto;
  opacity: 1;
}

2. 原生JavaScript实现切换逻辑

用原生DOM API替代jQuery的事件绑定和动画逻辑:

// 获取所有切换链接("Sign In"和"Create an account")
const toggleLinks = document.querySelectorAll('.message a');

// 给每个链接绑定点击事件
toggleLinks.forEach(link => {
  link.addEventListener('click', function(event) {
    // 阻止a标签默认跳转行为(避免点击后跳转到页面顶部)
    event.preventDefault();
    
    // 获取两个表单元素
    const loginForm = document.querySelector('.login-form');
    const registerForm = document.querySelector('.register-form');
    
    // 判断当前登录表单的显示状态,切换两个表单的显示/隐藏
    const isLoginVisible = loginForm.style.height !== '0px' && loginForm.style.opacity === '1';
    
    if (isLoginVisible) {
      // 隐藏登录表单,展开注册表单
      loginForm.style.height = '0px';
      loginForm.style.opacity = '0';
      // 用scrollHeight获取注册表单实际内容高度,实现平滑展开
      registerForm.style.height = registerForm.scrollHeight + 'px';
      registerForm.style.opacity = '1';
    } else {
      // 隐藏注册表单,展开登录表单
      registerForm.style.height = '0px';
      registerForm.style.opacity = '0';
      loginForm.style.height = loginForm.scrollHeight + 'px';
      loginForm.style.opacity = '1';
    }
  });
});

关键细节说明

  • querySelectorAll/querySelector是原生JS的选择器方法,对应jQuery的$()选择器,前者获取所有匹配元素,后者获取第一个匹配元素。
  • addEventListener用于绑定点击事件,替代jQuery的click()方法。
  • scrollHeight用来获取表单的实际内容高度,解决height:auto无法过渡的问题,实现和jQueryanimate一致的平滑高度变化。
  • 过渡时间0.6s和jQuery的slow参数(默认600ms)一致,保证动画速度相同。

内容的提问来源于stack exchange,提问作者hongsungdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:11:54