zoukankan      html  css  js  c++  java
  • MooTools 1.4 源码分析 Fx.Morph

    Mootools1.4 - Fx.Morph类的源码分析,如果理解有误欢迎指正:

    View Code
      1     /*
    2 ---
    3
    4 name: Fx.Morph
    5
    6 description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.
    7
    8 license: MIT-style license.
    9
    10 requires: Fx.CSS
    11
    12 provides: Fx.Morph
    13
    14 源码分析: 苦苦的苦瓜(http://www.cnblogs.com/hmking)
    15
    16 ...
    17 */
    18
    19 // #region - Fx.Morph -
    20
    21 /**
    22 * @Fx.Morph: 提供一次对多个CSS属性进行动画特效变换的功能,所以本类的属性为多值集合
    23 **/
    24 Fx.Morph = new Class({
    25
    26 // 继承自Fx.CSS
    27 Extends: Fx.CSS,
    28
    29 /**
    30 * @method: initialize
    31 * @param element - (mixed) 元素的id或引用
    32 * @param options - (object, 可选) Fx类中提供的可选项
    33 * @description: 构造函数,提供将多个元素的CSS属性值从一个值向另一个值进行转化的功能
    34 **/
    35 initialize: function (element, options) {
    36 // element属性存储特效所作用的元素对象
    37 this.element = this.subject = document.id(element);
    38 // 调用父类的同名方法
    39 this.parent(options);
    40 },
    41
    42 /**
    43 * @method: set
    44 * @param now - (mixed) 可以是包含CSS属性键值对的对象, 或是一个CSS选择器(必须在页面中已定义).如果对CSS属性只给出一个值,则变换的时候将把元素当前的属性值作为起始值.
    45 * {
    46 * 'height': 200,
    47 * 'width': 200,
    48 * 'background-color': '#f00',
    49 * 'opacity': 0
    50 * }
    51 * @returns: (object) 主调Fx.Morph实例
    52 * @description: 将元素的指定CSS属性值立即设为指定值
    53 **/
    54 set: function (now) {
    55 // 如果参数是字符串类型,表示为CSS选择符,从当页页面的样式规则中查找指定的规则
    56 if (typeof now == 'string') {
    57 now = this.search(now);
    58 }
    59 // 分别设置每一项样式值
    60 for (var p in now) {
    61 this.render(this.element, p, now[p], this.options.unit);
    62 }
    63 return this;
    64 },
    65
    66 /**
    67 * @method: compute
    68 * @param from - (object) 解释过的各项样式属性的起始值的对象
    69 * @param to - (object) 解释过的各项样式属性的结束值的对象
    70 * @param delta - (mixed) 特效变化所需要的比例因子
    71 * @returns: (array) 包含计算过的各项样式属性当前值信息的一个数组
    72 * @description: 根据各项样式属性初始值,结束值和特效比例因子计算各项样式属性的当前值
    73 **/
    74 compute: function (from, to, delta) {
    75 var now = {};
    76 for (var p in from) {
    77 // 对每一项样式属性,调用Fx.CSS类的同名方法计算
    78 now[p] = this.parent(from[p], to[p], delta);
    79 }
    80 return now;
    81 },
    82
    83 /**
    84 * @method: start
    85 * @param roperties - (mixed) 可以是包含CSS属性键值对的对象, 或是一个CSS选择器(必须在页面中已定义).如果对CSS属性只给出一个值,则变换的时候将把元素当前的属性值作为起始值.
    86 * {
    87 * 'height': [10, 100],
    88 * 'width': [900, 300],
    89 * 'opacity': 0,
    90 * 'background-color': '#00f'
    91 * }
    92 * @returns: (object) - 主调Fx.Morph实例
    93 * @description: 串联执行多个CSS属性的变换(并触发'start'事件)
    94 * @notes:
    95 * 如果传入一个CSS选择器, 则该选择器必须在页面存在相应匹配的样式
    96 * 不支持多选择器(逗号分隔的多个选择器)
    97 * @import'ed CSS rules will not be available for Morph calls. All CSS selectors must be present in CSS directly loaded into the page.
    98 **/
    99 start: function (properties) {
    100 // 检查当前特效运行状态,决定是否运行新特效
    101 if (!this.check(properties)) { return this; }
    102 // 如果提供properties参数类型为字符串,表明指定的是CSS选择符名,需要从当前页的样式规则中查找各项属性
    103 if (typeof properties == 'string') {
    104 properties = this.search(properties);
    105 }
    106 var from = {},
    107 to = {};
    108 // 对每项CSS属性值计算解释后的值,此时的from和to对象每个键值皆为一个数组
    109 for (var p in properties) {
    110 var parsed = this.prepare(this.element, p, properties[p]);
    111 from[p] = parsed.from;
    112 to[p] = parsed.to;
    113 }
    114 // 调用Fx类的构造函数
    115 return this.parent(from, to);
    116 }
    117
    118 });
    119
    120 // #endregion
    121
    122 // #region - Element.Properties.morph -
    123
    124 /**
    125 * @element property: morph
    126 * @description: 用于设置或获取元素上的Fx.Morph实例,实现单件模式
    127 **/
    128 Element.Properties.morph = {
    129
    130 // setter设置Fx.Morph对象参数
    131 set: function (options) {
    132 // 获取元素上的Fx.Morph实例后先执行cancel方法,取消特效的执行,然后再设置可选参数
    133 this.get('morph').cancel().setOptions(options);
    134 return this;
    135 },
    136
    137 // getter获取Fx.Morph对象
    138 get: function () {
    139 // 先从临时对象读取,看有没缓存到Fx.Morph实例
    140 var morph = this.retrieve('morph');
    141 if (!morph) {
    142 // 如果没有缓存,则保存一个新的Fx.Morph实例
    143 morph = new Fx.Morph(this, { link: 'cancel' });
    144 this.store('morph', morph);
    145 }
    146 return morph;
    147 }
    148
    149 };
    150
    151 // #endregion
    152
    153 // #region - Element Method -
    154
    155 // 元素调用Fx.Morph的快捷方式
    156 Element.implement({
    157
    158 /**
    159 * @element method: morph
    160 * @param properties - (mixed) 可以是包含CSS属性键值对的对象, 或是一个CSS选择器(必须在页面中已定义).如果对CSS属性只给出一个值,则变换的时候将把元素当前的属性值作为起始值.
    161 * @returns: (element) 返回主调元素
    162 * @description: 对元素执行指定属性值的动画特效变换
    163 **/
    164 morph: function (props) {
    165 // 这是使用上面的getter取Fx.Morph实例,再start,props可以为多个样式属性数组或CSS选择符
    166 this.get('morph').start(props);
    167 return this;
    168 }
    169
    170 });
    171
    172 // #endregion

  • 相关阅读:
    js 图片转base64上传图片
    小程序 分享之后,从分享点进去 input里面中文值被转化成字符,需再转化成中文方法
    uni-app map组件的marker
    Python小练习003
    Python小练习002
    Python小练习001
    耶鲁大学——心理学导论(这就是你的大脑)
    ORACLE 创建新表
    键盘事件
    VIDEO当前视频的总长度和视频进度
  • 原文地址:https://www.cnblogs.com/hmking/p/2196613.html
Copyright © 2011-2022 走看看