首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 7 章 处理用户交互
7.1 事件的监听与处理
7.1.1 事件监听示例
7.1.2 多事件处理
7.1.3 事件修饰符
7.2 Vue中的事件类型
7.2.1 常用的事件类型
7.2.2 按键修饰符
7.3 实战一:随鼠标移动的小球
7.4 实战二:弹球游戏
第 8 章 组件基础
8.1 关于Vue应用与组件
8.1.1 Vue应用的数据配置选项
8.1.2 定义组件
8.2 组件中数据与事件的传递
8.2.1 为组件添加外部属性
8.2.2 处理组件事件
8.2.3 在组件上使用v-model指令
8.3 自定义组件的插槽
8.3.1 组件插槽的基本用法
8.3.2 多具名插槽的用法
8.4 动态组件的简单应用
8.5 实战:开发一款小巧的开关按钮组件
第 9 章 组件进阶
9.1 组件的生命周期与高级配置
9.1.1 生命周期方法
9.1.2 应用的全局配置选项
9.1.3 组件的注册方式
9.2 组件props属性的高级用法
9.2.1 对props属性进行验证
9.2.2 props的只读性质
9.2.3 组件数据注入
9.3 组件Mixin技术
9.3.1 使用Mixin来定义组件
9.3.2 Mixin选项的合并
9.3.3 进行全局Mixin
9.4 使用自定义指令
9.4.1 认识自定义指令
9.4.2 自定义指令的参数
9.5 组件的Teleport功能
第 10 章 Vue响应性编程
10.1 响应性编程原理与在Vue中的应用
10.1.1 手动追踪变量的变化
10.1.2 Vue中的响应性对象
10.1.3 独立的响应性值Ref的应用
10.2 响应式的计算与监听
10.2.1 关于计算变量
10.2.2 监听响应式变量
10.3 组合式API的应用
10.3.1 关于setup方法
10.3.2 在setup方法中定义生命周期行为
10.4 实战:支持搜索和筛选的用户列表示例
10.4.1 常规风格的示例工程开发
10.4.2 使用组合式API重构用户列表页面
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(三)
小册名称:TypeScript和Vue从入门到精通(三)
### 7.3 实战一:随鼠标移动的小球 在前端开发中,动态效果和交互性往往是吸引用户的关键。使用TypeScript和Vue.js框架结合,我们可以创建出既美观又高效的交互效果。本章节将通过一个具体的实战项目——实现一个随鼠标移动而移动的小球,来深入探索Vue.js与TypeScript的结合应用,以及如何通过Vue的响应式系统和事件处理机制来增强用户界面的交互性。 #### 7.3.1 项目概述 在这个实战项目中,我们将创建一个简单的Vue组件,该组件包含一个圆形小球(通过CSS样式定义),该小球会随着鼠标在浏览器窗口内的移动而移动,模拟出一种跟随效果。通过这个项目,我们将学习到Vue组件的基本结构、TypeScript在Vue项目中的应用、CSS样式的基本应用、以及如何利用Vue的事件处理机制来响应鼠标移动事件。 #### 7.3.2 环境准备 在开始之前,请确保你的开发环境中已经安装了Node.js、npm(或yarn)、Vue CLI,并且已经通过Vue CLI创建了一个支持TypeScript的Vue项目。如果你还没有创建项目,可以参照Vue CLI的官方文档来执行创建操作。 #### 7.3.3 组件开发 ##### 7.3.3.1 创建组件 首先,在你的Vue项目中创建一个新的Vue组件。假设我们将这个组件命名为`MouseFollowBall.vue`。在`src/components`目录下创建这个文件,并添加以下内容的基础框架: ```vue <template> <div ref="ballContainer" class="ball-container"> <div class="ball"></div> </div> </template> <script lang="ts"> import Vue from 'vue'; export default Vue.extend({ name: 'MouseFollowBall', mounted() { this.handleMouseMove(); }, beforeDestroy() { window.removeEventListener('mousemove', this.onMouseMove); }, methods: { onMouseMove(event: MouseEvent) { // 更新小球位置逻辑 } } }); </script> <style scoped> .ball-container { position: relative; width: 100%; height: 100vh; /* 视图高度 */ overflow: hidden; } .ball { position: absolute; width: 50px; height: 50px; background-color: red; border-radius: 50%; /* 初始位置,可以根据需要调整 */ top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> ``` ##### 7.3.3.2 实现小球跟随鼠标移动 接下来,我们需要在`onMouseMove`方法中实现小球的跟随逻辑。首先,我们需要获取到小球(`.ball`元素)的引用,并通过改变其`style.left`和`style.top`属性来移动它。但是,直接操作DOM通常不是Vue推荐的方式,因为Vue的响应式系统可以帮助我们更优雅地处理这类问题。不过,在本例中,由于我们直接依赖于鼠标的坐标,所以直接操作DOM是可行的。 为了更好地利用Vue的响应式特性,我们可以考虑将鼠标的位置作为组件的响应式数据,然后绑定到小球的样式上。但是,由于CSS样式绑定在Vue中通常用于动态切换类名或样式对象,而直接绑定到`style.left`和`style.top`可能不是最优雅的方式。因此,我们将采用一种折中的方法:使用计算属性结合内联样式。 不过,为了简化说明,这里我们直接操作DOM。在`mounted`生命周期钩子中添加事件监听器,并在`onMouseMove`方法中更新小球位置: ```vue <script lang="ts"> // ... export default Vue.extend({ // ... mounted() { window.addEventListener('mousemove', this.onMouseMove); }, methods: { onMouseMove(event: MouseEvent) { const ball = this.$refs.ballContainer.querySelector('.ball') as HTMLElement; const rect = this.$refs.ballContainer.getBoundingClientRect(); ball.style.left = `${(event.clientX - rect.left) - ball.offsetWidth / 2}px`; ball.style.top = `${(event.clientY - rect.top) - ball.offsetHeight / 2}px`; } } // ... }); </script> ``` 注意,这里我们通过`$refs`访问到了`.ball-container`元素,并在其内部查询`.ball`元素。然后,我们根据鼠标的位置(`event.clientX`和`event.clientY`)以及`.ball-container`的位置(通过`getBoundingClientRect()`获取)来计算小球的绝对位置,确保小球能够准确地跟随鼠标移动。 #### 7.3.4 组件优化与扩展 ##### 7.3.4.1 性能优化 虽然直接操作DOM在这个简单的例子中是可以接受的,但在更复杂的应用中,频繁的DOM操作可能会影响性能。为了优化性能,可以考虑使用Vue的过渡和动画系统(如`<transition>`和`<transition-group>`),或者利用CSS3的`transform`和`will-change`属性来告知浏览器哪些属性可能会被改变,从而提前进行优化。 ##### 7.3.4.2 功能扩展 - **小球速度控制**:可以添加一个速度控制机制,使小球不是立即跳到鼠标位置,而是以一定速度平滑移动过去。 - **小球轨迹记录**:记录小球的移动轨迹,并在鼠标静止时显示这些轨迹。 - **碰撞检测**:如果页面中有其他元素,可以添加碰撞检测逻辑,使小球在碰到这些元素时反弹或停止。 #### 7.3.5 总结 通过本章节的实战项目,我们不仅学习了如何在Vue.js项目中结合使用TypeScript,还深入理解了Vue的组件化开发模式、事件处理机制以及如何通过操作DOM来实现简单的动画效果。随鼠标移动的小球虽然是一个简单的项目,但它涵盖了前端开发中的许多基础知识和技巧,为后续更复杂的项目开发打下了坚实的基础。希望读者能够通过动手实践,加深对这些知识点的理解和掌握。
上一篇:
7.2.2 按键修饰符
下一篇:
7.4 实战二:弹球游戏
该分类下的相关小册推荐:
移动端开发指南
vue项目构建基础入门与实战
Vue原理与源码解析
Vue源码完全解析
Vue.js从入门到精通(三)
TypeScript和Vue从入门到精通(四)
TypeScript和Vue从入门到精通(五)
Vue.js从入门到精通(四)
TypeScript和Vue从入门到精通(二)
Vue面试指南
Vue.js从入门到精通(一)
VUE组件基础与实战