咨询热线:15911225507
龙霄
登录
首页-所有文章-Nuxt.js,Vue.js-正文

龙霄主题四个小怪兽守护的登录:趣味交互动效设计深度解析

龙霄龙霄
Nuxt.js, Vue.js
1个月前
0
0
3.88K
当你输入密码时,它们会偷看;当你移动鼠标时,它们会歪头跟随——这不是游戏,而是一个 Nuxt 4 项目的登录页面。四个彩色「小怪兽」让登录从枯燥的填表变成了令人会心一笑的体验。

一、这不是插图,是代码

打开 https://lx.yfdxs.com/login,页面底部站着四个彩色的「小怪兽」——紫色、黑色、橙色、黄色。它们不是静态插画,而是由纯 CSS 和 Vue 响应式驱动的活角色。核心代码在 LoginAnimatedCharacters.vue 中(约 300 行),通过四个 div + 精致的 computed 计算属性,赋予了它们生命。

二、四个角色,四种性格

角色颜色特点
🟣 紫色怪#6C3FF5180px400~440px最高,会眨眼,会伸长脖子偷看
⚫ 黑色怪#2D2D2D120px310px高冷,也会眨眼,但动作克制
🟠 橙色怪#FF9B6B240px200px矮胖半圆,只有瞳孔没有眼眶
🟡 黄色怪#E8D754140px230px有小嘴巴,情绪写在脸上

紫色和黑色拥有完整的「眼眶 + 瞳孔」结构(LoginAnimatedEyeBall),橙色和黄色则是简约的「纯瞳孔」风格(LoginAnimatedPupil)。

三、鼠标追踪:每一像素都跟随

四个怪兽的身体位置和眼球方向会根据鼠标位置实时计算。核心算法:

const centerX = rect.left + rect.width / 2
const centerY = rect.top + rect.height / 3
const deltaX = mouseX.value - centerX
const deltaY = mouseY.value - centerY

const faceX = Math.max(-15, Math.min(15, deltaX / 20))    // 眼球 X 偏移
const faceY = Math.max(-10, Math.min(10, deltaY / 30))    // 眼球 Y 偏移
const bodySkew = Math.max(-6, Math.min(6, -deltaX / 120)) // 身体倾斜
  • 眼球跟随deltaX / 20deltaY / 30 将屏幕像素差值缩放到 15px/10px 范围内,避免眼球飞出眼眶
  • 身体倾斜-deltaX / 120 取反——鼠标在右侧时身体向左倾,模拟「歪头看」的自然姿态
  • 限制范围:所有值通过 Math.max/min 钳制,确保动画永远在合理区间

四、输入时的小剧场

聚焦输入框时isTyping = true):

紫色怪的身体加高 40px(从 400→440),并且两个角色互相对视

watch(() => props.isTyping, (val) => {
    if (val) {
        isLookingAtEachOther.value = true
        // 800ms 后恢复
        lookTimeout = setTimeout(() => { isLookingAtEachOther.value = false }, 800)
    }
})

紫黑两怪的眼球会强制转向对方方向,仿佛在说「看,有人在登录!」

输入密码并切换可见时showPassword = true):

所有四个怪兽的眼睛齐刷刷转向密码区域

const purpleForceLookX = computed(() => {
    if (isPasswordVisible.value) return isPurplePeeking.value ? 4 : -4
})

更有趣的是紫色怪会周期性偷看——每隔 2~5 秒(随机),脖子伸长,眼球猛转,然后缩回:

const interval = Math.random() * 3000 + 2000
peekTimeout = setTimeout(() => {
    isPurplePeeking.value = true
    setTimeout(() => { isPurplePeeking.value = false }, 800)
}, interval)

五、眨眼动画:不机械的随机节奏

紫黑两怪会随机眨眼——间隔在 3~7 秒之间随机,眨眼持续 150ms:

function schedulePurpleBlink() {
    const interval = Math.random() * 4000 + 3000  // 3~7秒
    purpleBlinkTimeout = setTimeout(() => {
        isPurpleBlinking.value = true
        setTimeout(() => {
            isPurpleBlinking.value = false
            schedulePurpleBlink()  // 递归,永远循环
        }, 150)
    }, interval)
}

这种随机性让角色看起来不像程序——像活物。比起固定 5 秒眨一次,随机的 3~7 秒让每次眨眼都不可预测。

六、镜像布局支持

代码通过 isMirroredresolveDirection 系列函数支持水平翻转——如果登录组件使用 horizontal="left" 布局,所有位置和偏移会自动镜像。左右布局切换只需改一个 prop,无需重写任何动画逻辑。

七、性能考量

  • effectScope 隔离:所有 watcheffectScope 包裹,组件卸载时 scope.stop() 一次性清理
  • transition: duration-700 ease-in-out:身体移动用 CSS transition 而非 JS 动画,利用 GPU 合成层
  • setTimeout 精准清理onUnmounted 中清除所有 4 个 timeout,零泄漏

八、技术总结

维度实现
眼球跟随deltaX/20, deltaY/30 缩放 + Math.min/max 钳制
身体倾斜CSS skewX + 负反馈偏移
眨眼递归 setTimeout,3~7 秒随机间隔
输入反应watch(isTyping) → 对视 800ms
密码偷看watch(passwordLength, showPassword) → 随机 peek
镜像支持isMirrored → 所有绝对值自动取反
性能effectScope + CSS transition + 清理

九、结语

登录页通常是用户最无聊的触点——输入账号密码,点登录,结束。但这四个小怪兽把登录变成了一次微交互体验。用户会心一笑,网站的人情味就出来了。技术上并不复杂——300 行 Vue + CSS——但创意的价值远超代码量。

这种细节是区别「能用的网站」和「让人记住的网站」的关键——也是项目技术实力与产品品味兼具的最好证明。

标签:
本文原创,作者:龙霄,其版权均为龙霄所有。如需转载,请注明出处:https://lx.yfdxs.com/1413.html
龙霄

龙霄

Lv1Vip2Rec2
以 Nuxt.js 之力,焕新 WordPress 体验
121.94M3413.98W1W
加载中…
分享:
1
Nitro 服务端架构:安全代理层与性能引擎深度解析
Nitro 服务端架构:安全代理层与性能引擎深度解析上一篇
Nuxt.js + WordPress 架构:性能、速度、安全与缓存的全方位解析下一篇
Nuxt.js + WordPress 架构:性能、速度、安全与缓存的全方位解析
相关文章
总数:13
龙霄主题-电商与会员一体化产品插件:让内容变现从[能卖]到[卖得好]

龙霄主题-电商与会员一体化产品插件:让内容变现从[能卖]到[卖得好]

一套完整的电商交易链路,配合多级会员权限体系——从商品展示、购物车、优惠券到订单支付,从免费试读到VIP专属内容,用系统化的商业工具把你的知…
龙霄龙霄
Nuxt.js, WordPress
29天前
1
0
4.57K
0
龙霄主题-活动管理插件:从策划到落地,一站式活动运营解决方案

龙霄主题-活动管理插件:从策划到落地,一站式活动运营解决方案

一场成功的活动,背后是场地管理、嘉宾邀约、报名签到、票务结算的复杂协作。活动管理插件将全流程数字化——从活动创建、嘉宾管理、在线报名到现场签到,…
龙霄龙霄
Nuxt.js, WordPress
28天前
0
0
2.44K
1
龙霄主题-商城系统:课程、产品、活动三大插件的统一交易引擎

龙霄主题-商城系统:课程、产品、活动三大插件的统一交易引擎

一套底层交易链路,三类商品形态,统一购物车、合并结算、集中订单管理——商用电商商城系统将课程插件、实体产品插件、营销活动插件的核心能力深度整合,…
龙霄龙霄
Nuxt.js
28天前
0
0
2.63K
0
Nuxt 4 + WordPress GraphQL:数据管理策略与性能优化深度指南

Nuxt 4 + WordPress GraphQL:数据管理策略与性能优化深度指南

本文深入剖析基于Nuxt4+WordPressGraphQL的生产级数据层架构,从服务端SHA-256缓存代理、飞行中请求去重、…
大理旅行大理旅行
Nuxt.js, Vue.js, WordPress
1个月前
1
1
6.80K
8
龙霄主题-知识付费课程插件:核心功能与学习粘性提升策略

龙霄主题-知识付费课程插件:核心功能与学习粘性提升策略

在知识经济时代,如何将专业知识转化为可持续的在线课程产品?本文深入解析基于Nuxt.js+WordPress架构的知识付费课程插件,从核…
龙霄龙霄
Nuxt.js, WordPress
29天前
0
0
2.75K
0
Nuxt 4 国际化 i18n 架构与多语言路由策略

Nuxt 4 国际化 i18n 架构与多语言路由策略

本文完整呈现基于@nuxtjs/i18nv10的三语言(zh-CN/zh-TW/en)国际化方案,从prefix_except_defa…
龙霄龙霄
Nuxt.js, Vue.js
1个月前
0
0
3.23K
0
Nitro 服务端架构:安全代理层与性能引擎深度解析

Nitro 服务端架构:安全代理层与性能引擎深度解析

这道隐形的「围墙」将WordPress后端完全隔离在公网之外,同时通过多层缓存、请求去重和智能重试,为前端提供稳定、高效、安全的数据服务。…
龙霄龙霄
Nuxt.js
1个月前
0
0
2.70K
0
Nuxt.js + WordPress 架构:性能、速度、安全与缓存的全方位解析

Nuxt.js + WordPress 架构:性能、速度、安全与缓存的全方位解析

当Nuxt.js的现代化前端工程能力遇上WordPress强大的内容管理生态,两者通过Headless架构结合,打造出一套兼顾极致性…
大理旅行大理旅行
Nuxt.js, WordPress
29天前
1
1
7.92K
1
Nuxt 4 中 Naive UI 集成与 UnoCSS 原子化样式实战

Nuxt 4 中 Naive UI 集成与 UnoCSS 原子化样式实战

本文详解如何在Nuxt4项目中高效集成NaiveUI组件库与UnoCSS原子化CSS引擎,涵盖自动导入配置、SSR样式收集…
龙霄龙霄
Nuxt.js, Vue.js
1个月前
0
0
3.05K
1
Pinia 状态持久化与内存治理实践

Pinia 状态持久化与内存治理实践

本文系统介绍大型Nuxt4项目中25个PiniaStore的状态管理架构,深入分析shallowRef内存优化、localS…
龙霄龙霄
Nuxt.js, Vue.js
1个月前
1
1
3.59K
0
Nuxt.js页面构建器:一个模块,构建万千网站

Nuxt.js页面构建器:一个模块,构建万千网站

深入解析Nuxt4可视化页面构建器的设计哲学——从拖拽式模块编排、全设备实时预览到数据导入导出,一套工具满足企业官网、电商平台、教育课程、…
龙霄龙霄
Nuxt.js, Vue.js
1个月前
0
0
3.09K
0
拥抱现代Web开发:Nuxt.js + WordPress 架构革新指南

拥抱现代Web开发:Nuxt.js + WordPress 架构革新指南

一、性能优化:静态生成与动态渲染的完美平衡在当今快节奏的数字时代,网站性能直接关系到用户体验和业务转化。传统的WordPress主题开发…
龙霄龙霄
Nuxt.js, WordPress
1个月前
0
0
4.74K
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
龙霄
没有相关内容