浅谈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 相关文章推荐
Js 弹出框口并返回值的两种常用方法
Dec 30 Javascript
javascript:文字不间断向左移动的实例代码
Aug 08 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
React快速入门教程
Jan 17 Javascript
jQuery Pagination分页插件使用方法详解
Feb 28 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
JavaScript获取某一天所在的星期
Sep 05 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 Javascript
如何用JS实现简单的数据监听
May 06 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
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
python挖矿算力测试程序详解
2019/07/03 Python
python实现函数极小值
2019/07/10 Python
django 微信网页授权登陆的实现
2019/07/30 Python
python如何将多个PDF进行合并
2019/08/13 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
五年级音乐教学反思
2014/02/06 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
学校元旦晚会方案
2014/02/19 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书