首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解transit.js中的代码

理解transit.js中的代码
EN

Stack Overflow用户
提问于 2015-06-14 22:17:28
回答 2查看 73关注 0票数 2

我只是浏览了一下transit.js的源代码,发现了以下功能:

代码语言:javascript
复制
  $.cssHooks['transit:transform'] = {
    // The getter returns a `Transform` object.
    get: function(elem) {
      return $(elem).data('transform') || new Transform();
    },

    // The setter accepts a `Transform` object or a string.
    set: function(elem, v) {
      var value = v;

      if (!(value instanceof Transform)) {
        value = new Transform(value);
      }

      // We've seen the 3D version of Scale() not work in Chrome when the
      // element being scaled extends outside of the viewport.  Thus, we're
      // forcing Chrome to not use the 3d transforms as well.  Not sure if
      // translate is affectede, but not risking it.  Detection code from
      // http://davidwalsh.name/detecting-google-chrome-javascript
      if (support.transform === 'WebkitTransform' && !isChrome) {
        elem.style[support.transform] = value.toString(true);
      } else {
        elem.style[support.transform] = value.toString();
      }

      $(elem).data('transform', value);
    }
  };

我理解函数的后半部分,但是很难理解函数的最初部分,git上也可以找到函数,这里

一开始我看到这个,$.cssHooks['transit:transform'],这句话到底在说什么?

在此之后,我们有下面的代码行,即getter和setter方法,

代码语言:javascript
复制
set: function(elem, v) {

但是,在函数中,是谁传递了elem和v,我没有看到任何传递?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-14 23:44:15

阅读关于cssHooks at jQuery cssHooks的文章

看看源代码 (搜索hooks.gethooks.set)

.cssHooks是一个包含getter和setters的objectsarray,它将由.css()执行。仅此而已。

代码语言:javascript
复制
    $.cssHooks['transit:transform'] = {set: function(elem,value){}, get: function(elem){}}
     equal:
    $.cssHooks['transit:transform'] = {};
    $.cssHooks['transit:transform'].set = function(elem, value){};
    $.cssHooks['transit:transform'].get = function(elem){};

    $(element).css('transit:transform',value)
     comes to:
    $.cssHooks['transit:transform'].set(element,value)

    $(element).css('transit:transform')
     comes to:
    $.cssHooks['transit:transform'].get(element)

$.cssHooks['transit:transform'] = {set:function(){}, get: function(){} }

{...}是一个对象创建。

getset目前还没有执行。

他们创造了{set:function(){}, get: function(){} }

所以。简单地说:.css()将为挂起的属性执行setget函数。

如果您想知道实际的getter和setter是如何工作的:Object.defineProperty()

票数 2
EN

Stack Overflow用户

发布于 2015-06-14 22:27:34

在Javascript中,可以使用以下语法向属性添加/访问:

代码语言:javascript
复制
myObject.myProperty

或者使用这种语法:

代码语言:javascript
复制
myObject['myProperty']

这也是同样的结果

所以你的台词

代码语言:javascript
复制
$.cssHooks['transit:transform'] 

只意味着我们想要将一个对象(在原始文章中{}之间的代码)存储在‘transport:transform’属性中,该属性位于$ object内的cssHooks属性中。

这是同样的事情:

代码语言:javascript
复制
$['cssHooks']['transit:transform']

他们使用'‘语法的原因是transit:transform包含':’char,如果您想以这种方式访问它,则不允许这样做:

代码语言:javascript
复制
$.cssHooks.transit:transform //doesn't work

编辑:

要回答您的第二个问题,我不需要know...the代码,您所显示的只是“transport:transform”属性的“描述”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30835129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档