浅谈javascript获取元素transform参数


Posted in Javascript onJuly 24, 2015

之前写页面的时候有试过想用js获取某些元素的translate的数值什么的,但是translate又是transform的子样式(勉强说说),理所当然就是先获取transform样式,再读里面的值。

body{-webkit-transform: translateX(20px);}

但当我尝试这样做的时候,奇迹出现了:

浅谈javascript获取元素transform参数

当时我的内心几乎是崩溃的,我只想安安静静的获取translate的值而已啊,谁知给我弹出这货,虽然上高数课的时候也有讲到所有变化(二维、三维)效果都可以浓缩在一个矩阵里面的,但如果要逆向解析矩阵得到我想要的值就不是这么简单了。

一次偶然的机会,我再次想用js获取translate的值,这次的结果出乎意料:

浅谈javascript获取元素transform参数

看到这一幕,简直是泪如雨下,虽然不能直接就得到我要的值,但是拿正则匹配一下就可以了。

你是不是以为是jq做了手脚?其实不然,我比对了一下,发现两次body样式的写法是不一样的:

第一次:

body{-webkit-transform: translateX(20px);}

第二次:

<body style='-webkit-transform: translateX(20px);'></body>

没错,第一次是通过css设置,第二次是通过body的style属性设置的,按照我的理解,css和style属性虽然都可以对页面元素进行渲染,但是两者的地位是不一样的。(以下含推测成分)

当页面加载时,css和style对渲染树产生了作用,都会影响元素的变现,不同的地方在于style是元素的属性,用户设置了什么就应该保存什么,就想一个烙印深深烙在了特定元素上,所以当body通过style设置‘-webkit-transform'时,我们可以通过document.body.style.webkitTransform 原样获取设置的值。也许你会有疑问,那直接获取css设置的值不就好了嘛。但我觉得这是做不到的(除去解析css文件的方法),因为css文件被加载完,形成渲染树后它的任务就完成了,css和style所产生的最终对元素进行渲染的规则都可以通过window.getComputedStyle(element) 找到。通过这个方法我们可以看到,transform最终产生的渲染规则是以矩阵maxrix(x,x,x,x,x)的形式保存的(也许是方便计算机的运算),

浅谈javascript获取元素transform参数

这就解释了为什么$('body').css('-webkit-transform') 这货会返回矩阵了,而且也看出了$().css()方法是从浏览器最终渲染规则中返回结果的(就是window.getComputedStyle(element)),所以它是读取不了你的css设置参数的,而且当你用$().css()给元素设置样式时,其实它是通过设置元素style属性(内联)设置的,试试你就知道了。虽然这个$().css()有‘css'字样,但是它和‘css文件'没有半毛钱关系,或许这就能证明上面我说的:‘不能直接获取css设置的值'吧。

总结:

1.css和style共同作用渲染树,且style设置的值会原样保存为元素的style属性的子属性,最终渲染规则可以通过window.getComputedStyle(element) 找到

2.jq$().css()方法获取的是最终渲染规则,设置的是style属性(内联样式)

建议:

1.当我们需要实时获取并修改元素transform各参数的时候(例如用translate实现各种滑动效果),应该把transform设置成元素的内联属性(通过style设置),这样方便读取

2.矩阵虽吓人,但若不想成为平凡的页面仔,还是需要搞懂

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
JavaScript从数组中删除指定值元素的方法
Mar 18 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
Jun 05 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 Javascript
js实现汉字排序的方法
Jul 23 #Javascript
javascript实现全角半角检测的方法
Jul 23 #Javascript
javascript比较两个日期相差天数的方法
Jul 23 #Javascript
jquery实现简单的轮换出现效果实例
Jul 23 #Javascript
jquery实现简单实用的打分程序实例
Jul 23 #Javascript
javascript实现框架高度随内容改变的方法
Jul 23 #Javascript
js正则表达式中exec用法实例
Jul 23 #Javascript
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php set_time_limit()函数的使用详解
2013/06/05 PHP
PHP加密解密实例分析
2015/12/25 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
浅谈JavaScript之事件绑定
2013/07/08 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
Vue实现简单购物车功能
2020/12/13 Vue.js
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python实现的多线程http压力测试代码
2017/02/08 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
详解Python self 参数
2019/08/30 Python
Pycharm github配置实现过程图解
2020/10/13 Python
幼儿生日活动方案
2014/08/27 职场文书
法制演讲稿
2014/09/10 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
检讨书格式范文
2015/05/07 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
学生安全责任协议书
2016/03/22 职场文书
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android