内容简介: 1,关于面向对象 2,关于面向物理模型 3,示例 4,总结
1,关于面向对象javascript
javascript中的面向对象是一个老生常谈的问题,可能有人问你的话你也能霹雳啪啦的说一通,好比最多见的,html
对象的三要素:对象的名字、对象的属性、对象的方法java
//例子: function obj(){ //对象名: obj this.desc=“示例” //对象属性 desc this.getDesc=function(){ //对象方法 getDesc return this.desc; } }
或者稍微高级一点:对象的封装、对象的继承,对象的实例化git
这里内容太多,略过,能够本身去查资料, 留个坑,回头本身写一篇文章填上 -_-|||,毕竟说太多就跑题了 填坑一:
继承github
还有一点,就是尽可能用面向对象的思惟去解决问题ide
//例子-错误的写法: if(a){} else if(b){} else if(c){} else{} //例子-面向对象的写法: let obj = { a:function(){}, b:function(){}, c:function(){}, d:function(){} } //item = a || b || c || d ... let result = obj[item](); //错误的写法 function(a,b,c,d,e){} //正确的示范 let param = {a:"a",b:"b",c:"c"...} function(param){} ...
其实以上都不是我要说的,这里我更偏向于把对象看做一件现实当中的“事物”,即物理上存在的东西,而后把它抽象出来,就是咱们须要的东西动画
2,关于面向物理模型this
面向物理模型这个说法我不知道有没有人说过,反正我是这么理解的,就这么说吧,prototype
简单点的物理模型插件
//例如 电灯对象:{ 名字:电灯, 方法1:开, 方法2:关, 配置:充电 || 换电池 ? } //备注:固然可能还有其它的,我这里只挑主要的说
复杂点的物理模型
//例如 滑动的滑块:{ 名字:滑块A, 初始速度:v, 加速度:a, 地面摩擦力:f, 加速度持续时间:t, 可选 :{ 质量:m, 半径:r }, 计算:{ 运动距离:s, 运动时间:T, ....... } }
//备注:我不是来帮大家复习物理题的哈,这确实是一个模型,当你写一些动画效果时应该算是经常使用的物理模型
混合物理模型
其实说了那么多,然而咱们用到的时候,基本上都是两种模式的混合, 因此在实际抽象模型(数学建模?)的时候,分块拆分是很好的选择
3,示例
我知道,只谈理论不写代码都是耍流氓,虽然我很擅长.......不耍流氓,因此,这里就用代码来讲话
好比我这里要写一个多功能选择器的插件,相似IOS的日历选择器,只是不单单是支持日历,能够自定义内容,
基于简单物理模型------静态-------数据,样式,配置参数
var picker=function(options){ this._modelData= options.modelData || {}; //填充数据 this._lineHeight=options.lineHeight || 40; //行高 this._character=options.character || “-”; //间隔符号 this._showLines=options.showLines || 3; //显示行数,必须为奇数 this.getSelectOpti //获取选中的选项信息 //do sth } this.renderHtml=function(){} //渲染插件 } picker.prototype.init=funtion(){} // ......... //备注:简要代码,方面理清思路
基于复杂物理模型------动态------动做,改变,计算
.....{ this._lineHeight = options.lineHeight || 48;//px *此处lineHeight须要在样式中设置! this._moveDistance = options.moveDistance || 1;//每次滚动的单位 px ,加快滚动速度,与回弹速度 this._moveDouble = options.moveDouble || 2;// 惯性系数 数字越大 拖动后滚动的距离越远 /*this._dragSpeed = options.dragSpeed || 1; //惯性系数*/ this._moveRate = options.moveRate || 500;// 1~1000 移动频率 数字越大,频率越高 this._character = options.character || null;//间隔符号 this._showLines = options.showLines || 3;//默认显示行数 this._fza = options.fza || 0.02; //阻力系数 单位时间内速度减少的值 this._resistance = options.resistance || 0.10;// 当滚动超出边界时受到阻力 } //........ picker.prototype.scrollToIndex=function(){} //滑动到第N个 picker.prototype.slideY=function(){} //滑动动画 包括匀速运动,匀减速运动等 picker.prototype.autoFitIndex=function(){} //自动贴合 picker.prototype.updatePicker=function(){} //更新数据 picker.prototype.scrollPrev=function(){} picker.prototype.scrollNext=function(){} picker.prototype.stopCallBack=function(){} //..........
完整代码 :
Github
4,总结:
其实这玩意说白了就是一个插件,一个地址,一个demo的事情, 但是我却能写这么多,因而可知吹牛逼(理论知识和抽象能力)的重要性。