前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【css基础】如何理解transform的matrix()用法

【css基础】如何理解transform的matrix()用法

原创
作者头像
前端达人
修改于 2019-06-20 15:41:26
修改于 2019-06-20 15:41:26
2.9K0
举报
文章被收录于专栏:前端达人前端达人

实现炫酷的网页动画效果,自然少不了css3中transform的属性,此属性功能丰富且强大,比如实现元素的位移translate(x,y),缩放scale(x,y),2d旋转rotate(angle),倾斜变换skew(x-angle,y-angle)等,利用这些属性可以实现基本的动画效果,如果你要实现自定义和像素级别控制的高级动画效果,我们还需要深入了解它的另外一个属性——matrix,matrix就是矩阵的意思,听起来是不是很高级,你没听错实现更高级的效果,你需要了解“矩阵”,听到“矩阵”,是不是很惊慌,当初笔者学习线性代数时也甚是无聊,真不知道这么课有啥用,没想到这门课的在计算机应用领域应用十分广泛,比如今天说的动画效果,还有现在火爆的人工智能,真是悔不当初,当时没有好好学习这么课程。

今天笔者将从以下几个方面进行介绍:

  • 向量与矩阵基础介绍
  • matrix()示例
  • matrix参数详细介绍

向量与矩阵基础介绍

关于这部分内容,有线性基础的同学们可以忽略往下看,在这里笔者只会介绍最基础的内容,什么是向量和矩阵,以及对应的基础运算。

向量

向量被用于许多科学领域用来描述方向和大小,我们一般用笛卡尔坐标系进行向量的描述,向量简单的来说就是把数排成一列或一行进行展示,比如向量(2,1)和(3,3)在坐标系中表示如下:

假设我们现在有两个向量AB(8,2)和向量AC(2,6),我们对其进行加、减、乘,示例如下:

向量加法:

AB+AC=AD (8,2)+(2,6)=(8+2,2+6)=(10,8)

向量减法

AB-AC= AD (8,2)-(2,6)=(8-2,2-6)=(6,-4)

向量乘法

AB✖️AC = AD (8,2)✖️(2,6)=(8✖️2,2✖️6)=(16,12)

矩阵

简单来说把数排列成长方形就是矩阵,我们一般用几行几列来描述矩阵,比如 2✖️2 矩阵,2✖️3 矩阵等,乘号左边代表行数,乘号右边代表列数,如下图所示表示2✖️2 的矩阵:

矩阵相加

相同规模(行数列数都相等)的矩阵之间的加法如下图所示:

我们可以看出是对应的位置两两相加而得。

矩阵相乘

1、矩阵与向量相乘,示意图如下:

从图可以看出矩阵每行对应的位置与向量每行对应的位置分别相乘最后将结果相加,得到结果每行对应的数字。

2、矩阵与矩阵相乘

比如 2✖️4 的矩阵与 4️✖️3 的矩阵相乘我们得到一个 2✖️3的矩阵,如下图所示

从图示中我们可以看出,我们左边矩阵的每行与右边矩阵的每列分别相乘,相乘规则如矩阵与向量相乘的规则一样,最终得到矩阵的行数等于左边矩阵的行数,列数等于右边矩阵的列数。

matrix()示例

介绍完基本向量和矩阵的知识后,我们来看看transform的matrix()应用举例,transform:matrix(a,b,c,d,tx,ty)一共六个参数,用矩阵表示如下图所示:

注:参数书写的方向是竖着写的。

这六个参数代表什么意思,这里先不做介绍,稍后会详细介绍,我们先从一个例子的应用来讲起,现在我们有这样一个元素,其对应的CSS属性如下:

代码语言:css
AI代码解释
复制
#transformedObject {
     position: absolute;
     left: 0px;
     top: 0px;
     width: 200px;
     height: 80px;
}

此段代码,对应的页面效果如下:

从此图我们可以看出,此长方形的四个顶点从左上顺时针分别为:(0,0),(200,0),(200,80),(0,80),我们对其进行transform:matrix(0.9, -0.05, -0.375, 1.375, 220, 20)的变换,css代码如下:

代码语言:css
AI代码解释
复制
#transformedObject {
     position: absolute;
     left: 0px;
     top: 0px;
     width: 200px;
     height: 80px;
     transform:  matrix(0.9, -0.05, -0.375, 1.375, 220, 20);
     transform-origin: 0 0;
}

注:transform-origin是变形原点,也就是该元素围绕着那个点变形或旋转,该属性只有在设置了transform属性的时候起作用;

应用变换后的效果如下图

这四个点的值,是怎么得出来的呢,其实有了前面的向量和矩阵知识,我们很容易算出,matrix(0.9, -0.05, -0.375, 1.375, 220, 20)对应的矩阵如下图:

元素最初的每个点相当一个向量,例如(200,0)可表示如下图:

变换后的四个点,其实是matrix(0.9, -0.05, -0.375, 1.375, 220, 20)对应的矩阵与原始四个点对应的向量分别相乘而得,具体的运算过程如下图:

与(200, 80)相乘的运算过程得到(370,120):

与(200, 0)相乘得到(400,10):

与(0, 80)相乘得到(190,130):

与(0,0)相乘得到(220,20):

经过运算后,我们最终变换后的四个点: (220,20),(400,10),(370,120),(190,130)

matrix参数详细介绍

上一小节,我们学习了如何利用向量和矩阵的知识,我们算出了元素经过matrix()变换后的最终结果,现在我们详细介绍下transform:matrix(a,b,c,d,tx,ty)这六个参数的意义,其实这六个参数,对应的是translate(x,y),scale(x,y),rotate(angle),skew(x-angle,y-angle)这些效果,每种变换效果对应的参数不同,如下图总结:

假如我们对元素进行旋转15度,往右动230px, X轴方向延长1.5倍,我们使用基本的变换属性代码下:

代码语言:css
AI代码解释
复制
#o1 {
   transform-origin: 0px 0px;
   transform: rotate(15deg) translateX(230px) scaleX(1.5);
}

如果用transform:matrix()怎么实现如上的最终效果,其实我们可以利用笔者针对transform:matrix(a,b,c,d,tx,ty)这六个参数对应的总结(如上图),其实就是每个变换对应的矩阵参数相乘的结果得到这6个参数值,记住一定要按照rotate,translateX,scaleX对应的顺序进行举行相乘,如下图所示(运算的结果笔者就不写了,留给大家练习下矩阵相乘)

小节

今天的内容就到这里,我们了解了transform除了有translate(x,y),scale(x,y),rotate(angle),skew(x-angle,y-angle)这些属性实现动画变换,还有一个高级属性matrix(),通过这个属性我们了解其背后的数学逻辑,只有掌握这个属性后,我们才能实现更为复杂的动画。

【ES6基础】let和作用域

【ES6基础】const介绍

【ES6基础】默认参数值

【ES6基础】展开语法(Spread syntax)

【ES6基础】解构赋值(destructuring assignment)

【ES6基础】箭头函数(Arrow functions)

【ES6基础】模板字符串(Template String)

【ES6基础】Set 与 WeakSet

【ES6基础】Map 与 WeakMap

【ES6基础】Symbol介绍:独一无二的值

【ES6基础】Object的新方法

【数据结构基础】栈简介(使用ES6)

【数据结构基础】队列简介(使用ES6)

更多精彩内容,请微信关注”前端达人”公众号!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Vue 3 事件处理
页面上会有很多的页面交互,例如用户点击按钮,会触发什么样的事件,这个事件要做什么事情,就会涉及到事件处理。
公众号---人生代码
2020/11/03
2.2K0
Vue 3 事件处理
JavaScript事件
JavaScript事件 对于事件来讲,首先,我们需要了解这样几个概念:事件;事件处理程序;事件类型;事件流;事件冒泡;事件捕获;事件对象;事件模拟,事件方面的性能优化(事件委托、移除事件处理程序); 事件的概念 事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过监听器(或者处理程序)来预定事件,以便事件发生的时候执行相应的代码。 事件处理程序:我们用户在页面中进行的点击这个动作,鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即:click、mousemove、loa
汤高
2018/01/11
2.2K0
JavaScript事件
JavaScript DOM
JavaScript DOM 是指 JavaScript 中的文档对象模型(Document Object Model);它允许 JavaScript 与 HTML 页面交互,使开发者可以通过编程方式动态地修改网页内容和样式,以及响应用户的交互。
久绊A
2023/03/25
6850
JavaScript基础-事件监听与处理
在Web开发中,事件驱动编程是核心机制之一,它使得页面能够响应用户的操作,如点击、滚动、键盘输入等。JavaScript提供了强大的事件监听与处理机制,让开发者能够轻松地为DOM元素绑定事件处理程序。本文将深入浅出地介绍JavaScript事件模型、绑定与解除事件监听器的方法,以及在实际应用中常见的问题与易错点,并通过代码示例给出避免策略。
Jimaks
2024/06/12
3720
JavaScript事件详解
想必大家对JavaScript的事件都不陌生吧,大多数在网站开发的时候都会用到,这也是JavaScript的基本功之一,本文就为各位梳理一下相关知识。
用户8983410
2021/09/19
7780
JavaScript语言基础与进阶指南
JavaScript,作为一种基于对象的、事件驱动型的、解释型的脚本语言,广泛应用于网页开发中,旨在实现网页的交互能力。本文将详细介绍JavaScript的基础用法以及进阶知识,帮助读者更好地理解和运用这门语言。
炒香菇的书呆子
2024/12/05
1920
【前端】详解JavaScript事件代理(事件委托)
事件代理(Event Delegation),又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。
程序员洲洲
2024/06/11
9670
【前端】详解JavaScript事件代理(事件委托)
前端系列第1集-什么是Dom事件流?
DOM 事件流(DOM Event Flow)是指在 HTML 或 XML 文档中,由用户或浏览器执行的事件的传递路径。当一个事件在一个元素上触发时,它会在该元素上被处理,然后逐级向上冒泡直到文档根节点,这就是事件冒泡。在事件冒泡的过程中,每个处理函数都可以阻止事件继续向上冒泡,也可以停止事件默认行为。
达达前端
2023/10/08
2610
【JavaScript】JavaScript开篇基础(5)
方法监听注册方式:addEventListener() 特点:同一个元素同一个事件可以注册多个监听器(监听处理函数function),按注册顺序依次执行
E绵绵
2024/11/13
1360
【JavaScript】JavaScript开篇基础(5)
深入理解JavaScript中的事件委托与事件代理
在JavaScript的开发中,事件处理是构建动态、交互式逻辑的关键。事件委托和事件代理,作为高效的事件处理策略,不仅优化了性能,还提升了代码的可维护性
iwhao
2024/07/05
3230
JavaScript 事件委托 以及jQuery对事件委托的支持
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.csdn.net/article/details/24009177
亦山
2019/05/25
9560
第9章 JavaScript事件处理
HTML5+CSS3+JavaScript Web 前端开发案例教程(慕课版)【不推荐】,微信读书中找到的学习Web前端书籍,第9章开始啦,耶(^-^)V
用户8928967
2021/09/22
1.1K0
再谈BOM和DOM(4):DOM0/DOM2事件处理分析
JavaScript能够让网站对用户的各种操作及时做出“反馈”,响应用户交互行为,而这些就是:DOM,事件以及事件处理
周陆军
2021/07/13
9410
JavaScript面试问题:事件委托和this
JavaScript不仅门槛低,而且是一门有趣、功能强大和非常重要的语言。各行各业的人发现自己最混乱的选择是JavaSscript编程语言。由于有着各种各样的背景,所以不是每个人都对JavaScript及其基本原理有广泛的认识。通常来书,除非你去参加工作面试才会去思考为什么或者怎么做,否则JavaScript只是你工作的内容。 这个系类的目标是深入探讨JavaScript的一些概念和理论。主题来自于 Darcy Clarke的JavaScript典型面试问题列表。希望你不仅仅是为了答案而阅读完这篇文章,每一
前朝楚水
2018/04/02
1.4K0
JavaScript小技能:事件
JavaScript 在不同环境下使用不同的事件模型:不同的编程环境下的事件机制是不同的,比如JavaScript 网页上的事件机制不同于在其他环境中的事件机制。(Node.js 的事件模型、浏览器插件WebExtensions技术的事件模型)
公众号iOS逆向
2022/08/22
1.6K0
JavaScript小技能:事件
JavaScript(十二)
这一篇,我们讲讲 JavaScript 中非常重要的概念 —— 事件。 JavaScript 与 HTML 之间的交互是通过事件实现的。
1ess
2021/11/01
3.4K0
事件
事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时... 事件流 事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层
小胖
2018/06/27
1.5K0
【Java 进阶篇】JavaScript 事件详解
在本篇博客中,我们将深入探讨JavaScript事件,这是网页交互的核心。我们将从什么是事件开始,然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终,我们将提供大量的示例代码来帮助您更好地理解JavaScript事件。
繁依Fanyi
2023/10/19
4240
【Web前端】嵌套元素的“事件”冒泡?!
事件处理是创建交互式用户界面的关键部分,浏览器通过事件系统让我们能够捕获和响应用户的输入,比如点击、鼠标移动、键盘输入等。
一条晒干的咸鱼
2024/11/19
2160
【Web前端】嵌套元素的“事件”冒泡?!
【Web APIs】JavaScript 事件基础 ① ( JavaScript 事件简介 | “ 事件 “ 概念 | “ 事件 “ 三要素 - 事件源 / 事件 / 事件处理程序 | 事件类型 )
通过在 HTML 网页中 添加 JavaScript 脚本 , 可以创建 动态页面 ,
韩曙亮
2024/06/24
3610
【Web APIs】JavaScript 事件基础 ① ( JavaScript 事件简介 | “ 事件 “ 概念 | “ 事件 “ 三要素 - 事件源 / 事件 / 事件处理程序 | 事件类型 )
推荐阅读
相关推荐
Vue 3 事件处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档