这个插件也能做好多好多的事,比如上拉下拉加载数据,轮播,等一切和运动有关的特效。

具体看我的allowTouch这篇博客,掌握了其用法,在来看它是怎么和omi结合的。就会很简单。

当然使用起来也比较方便。

老规矩,先看demo:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>omi-touch</title><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
</head>
<body><script src="../src/omi_soda.js"></script><script>Omi.OmiTouch.init();class App extends Omi.Component {constructor (data) {super(data);}style() {return `.main {width: 160px;overflow: hidden;border: 1px solid rgb(204, 204, 204);margin: 0 auto;text-indent: 10px;}.main ul {list-style: none;width: 100%;margin: 0;padding: 0;text-align: left;font-size: 14px;}.main li {padding: 0 10px;height: 40px;line-height: 40px;border-bottom: 1px solid #ccc;border-top: 1px solid #fff;background-color: #fafafa;font-size: 14px;}.touchArea {height: 250px;overflow: hidden;}`;}touchStart() {this.touch.min = this.refs.touchArea.offsetHeight - this.refs.scroller.offsetHeight;}pressMove(evt, prop) {console.log(evt);console.log(prop);}render() {return `<div class="main"><div class="touchArea" ref="touchArea" omi-touch touchInstance="touch" motionRef="scroller" min="0", max="0", touchStart="touchStart" pressMove="pressMove"><ul ref="scroller"><li>Hello, Omi-Touch!</li><li>AlloyTouch</li><li>Transformjs</li><li>AlloyFinger</li><li>Omi</li><li>AlloyGameEngine</li><li>Rosin</li><li>LivePool</li><li>AlloyStick</li><li>CodeStar</li><li>AlloyDesigner</li><li>JX</li><li>TEditor</li><li>JXAnimate</li><li>Spirit</li><li>AlloyImage</li><li>ModJS</li><li>Pretty row 16</li><li>stepify</li><li>AlloyTimer</li><li>Alloy Desktop</li><li>JX UI</li><li>CodeTank</li><li>iSpriter</li><li>Rythem</li><li>Go!Png </li><li> row 1</li><li> row 2</li><li> row 3</li><li>row 5</li><li> row 5</li><li> row 7</li><li> row 8</li><li> row 9</li><li> row 11</li><li> row 11</li><li> row 12</li><li> row 13</li><li> row 14</li><li> row 15</li><li> row 16</li><li> row 17</li><li> row 18</li><li> row 19</li><li> row 20</li><li> row 21</li><li> row 22</li><li> row 23</li><li> row 24</li></ul></div></div>
                `;}};Omi.render(new App(), 'body');</script>
</body>
</html>

看下结果,其实就是上下滚动很多内容。

看看具体怎么实现的,怎么把alloyTouch和Omi结合的(插件源码有所改动, 因为我需要实例化的alloytouch实例,所以加了些代码,

可以在dom上直接加上touchInstancs="自定义实例名",不写的话,默认会自动touchInstance+id自增,该实例对象会挂在到组件实例下去的),看源码即可,走你

(function () {var OmiTouch = {};    // OmiTouch集合对象var AlloyTouch = Omi.AlloyTouch;var Transform = Omi.Transform;var noop = function() { };    // 空函数OmiTouch._instanceId = 0;    // touch实例idOmiTouch.getInstanceId = function () {return OmiTouch._instanceId ++;    // 自增
        };// 获取绑定的函数var getHandler = function(name, dom, instance) {    // name: 属性值, dom: 反馈触摸的dom, instance实例var value = dom.getAttribute(name);    // 获取属性值if (value === null) {    // 没有函数就绑定noop空函数return noop;}else{return instance[value].bind(instance);    // 否则返回一个新函数
            }};// 获取数值var getNum = function(name, dom){    // name: 属性值, dom: 反馈触摸的domvar value = dom.getAttribute(name);    // 获取属性值if (value) {return parseFloat(value);    // 把字符串转成数字返回
            };}OmiTouch.init = function(){Omi.extendPlugin('omi-touch',function(dom, instance){var target = instance.refs[dom.getAttribute('motionRef')];    // 找到要运动的domvar touchInstanceName = dom.getAttribute('touchInstance') || 'touchInstance' + OmiTouch.getInstanceId();    // 获取touch实例名, 默认touchInstance+id 自增Transform(target, target.getAttribute('perspective') ? false : true);    // 不在运动对象上写perspective属性,默认不要透视(perspective="true/false" 则开启透视,只有不写才关闭)var initialValue = dom.getAttribute('initialValue');    // 初始值if (initialValue) {target[dom.getAttribute('property') || "translateY"] = parseInt(initialValue);    // 默认有初始值,是上下滑动
                };instance[touchInstanceName] = new AlloyTouch({touch: dom,//反馈触摸的domvertical: dom.getAttribute('vertical') === 'false' ? false : true,//不必需,默认是true代表监听竖直方向touchtarget: target, //运动的对象property: dom.getAttribute('property') || "translateY",  //被运动的属性min:  getNum('min', dom), //不必需,运动属性的最小值max:  getNum('max', dom), //不必需,滚动属性的最大值sensitivity: getNum('sensitivity', dom) ,//不必需,触摸区域的灵敏度,默认值为1,可以为负数factor: getNum('factor', dom) ,//不必需,表示触摸位移与被运动属性映射关系,默认值是1step: getNum('step', dom),//用于校正到step的整数倍bindSelf: dom.getAttribute('bindSelf') === 'true' ? true : false,touchStart: getHandler('touchStart', dom, instance),change: getHandler('change', dom, instance),touchMove: getHandler('touchMove', dom, instance),touchEnd: getHandler('touchEnd', dom, instance),tap: getHandler('tap', dom, instance),pressMove: getHandler('pressMove', dom, instance),animationEnd: getHandler('animationEnd', dom, instance)});});}OmiTouch.destroy = function() {    // 从Omi的插件集合移除该插件delete Omi.plugins['omi-touch'];};Omi.OmiTouch = OmiTouch;})();

恩恩,touch就这么和omi结合起来了,便有了omi-touch插件。

ps:很喜欢的一个插件,或者一个库吧,后期,我会加上一个轮播的封装,只要继承,初始化,简单的配置一下样式,就可复用的轮播,基于这个插件。

转载于:https://www.cnblogs.com/sorrowx/p/6763057.html

Omi框架学习之旅 - 插件机制之omi-touch 及原理说明相关推荐

  1. Omi框架学习之旅 - 插件机制之omi-finger 及原理说明

    以前那篇我写的alloyfinger源码解读那篇帖子,就说过这是一个很好用的手势库,hammer能做的,他都能做到, 而且源码只有350来行代码,很容易看懂. 那么怎么把这么好的库作为omi库的一个插 ...

  2. Omi框架学习之旅 - Hello World 及原理说明

    学什么东西都从hello world开始, 我也不知道为啥. 恩,先上demo代码, 然后提出问题, 之后解答问题, 最后源码说明. hello world - demo: class Hello e ...

  3. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...

  4. Omi框架学习之旅 - 通过对象实例来实现组件通讯 及原理说明

    组件通讯不是讲完了吗(上帝模式还没讲哈),怎么又多了种方式啊. 你484傻,多一种选择不好吗? 其实这个不属于组件通讯啦,只是当父组件实例安装和渲染完毕后,可以执行installed这个方法(默认是空 ...

  5. 滴滴Booster移动APP质量优化框架 学习之旅 三

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...

  6. Application应用框架思考(三) 之[插件机制]

    Application应用框架思考(三) 之[插件机制] /// <summary> /// 单例类 /// //为子功能提供主框架信息接口 类 /// </summary> ...

  7. 滴滴Booster移动APP质量优化框架 学习之旅 二

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 续写滴滴Booster移动APP质量优化框架学习之旅,上篇文章分 ...

  8. AD学习之旅(4)— 新建芯片类原理图库器件

    AD学习之旅(4)- 新建芯片类原理图库器件 一.前言 本文参考: [Altium500问]第006问 IC类器件的元件模型如何创建? [Altium500问]第007问 原理图库中如何使用封装向导快 ...

  9. 【安卓Framework学习】Wifi框架学习之热点评分机制

    系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...

最新文章

  1. Linux软连接和硬链接
  2. 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(2)
  3. 在项目中让Ajax面向对象 (二)
  4. ntop linux,Linux下开源监控软件Ntop的性能提升方案
  5. swagge php token,swagger在thinkphp6的使用方式
  6. 初始化_Linux的内存初始化
  7. python 描述符参考文档_Python-描述符
  8. 冰点还原精灵破解版|冰点还原精灵中文破解版下载(附冰点还原精灵注册机及许可证密钥)
  9. 国内手游渠道SDK快速接入之Unity篇
  10. python爬虫——GET请求百度关键词搜索案例
  11. html图片右边加竖线,插入Html竖线代码
  12. 编程序,输入长方形的两边长a和b,输出长方形的周长和面积
  13. 设置Mathtype的粗斜体
  14. 我的电脑里顽固图标删除解决
  15. 深入浅出JS—11 ES6中类class和extends的使用
  16. English--vowels_双元音
  17. 码农的自我修养 - 指令集架构种类
  18. SAP S4 HANA 安装部署记事七.SAP S4 ON HANA 的部署准备
  19. 论文阅读——From Image to Imuge: Immunized Image Generation
  20. keil 的bug日记

热门文章

  1. 作为一个新人,如何学习嵌入式Linux?
  2. 回发或回调参数无效。下拉菜单中使用ajax,联动菜单引起的问题解决方案
  3. 今天感觉有点冷了其实。
  4. 【转】一位软件工程师的6年总结
  5. 用于区分IE的:条件注释
  6. Android 实现边听边录音探究
  7. 【BZOJ】1692: [Usaco2007 Dec]队列变换
  8. 如何禁止用户名,密码自动填充
  9. Android 7.0 多窗口模式
  10. MySQL 5.1.40新特性及下载