MIP组件开发规范介绍 MIP组件开发规范详解

 更新时间:2016年12月21日 21:00  点击:1809
本次为大家带来的是MIP组件开发规范,帮助大家了解组件在开发时需要用到的组建是哪些,以及这些组件的作用等。

开发文档

站长开发扩展组件请参照下面链接

扩展组件 开发文档

开发辅助工具库

开发辅助工具和模块

手势:单击,双击,滑动

其它:dom触发js事件

组件类型划分

1、内置组件

定义:为了解决性能、安全性问题必须要使用的组件,代码被集成在mip.js中。如 mip-img、mip-video 等。

2、扩展组件

定义:其它类型的组件,一般情况下组件开发都是扩展组件,使用时需要引入对应的js文件。

mip除了手势之外还提供一些功能,以解决在组件中遇到的各种问题和提升开发效率,下面就为大家带来这些功能的详细介绍。

prerenderElement

提前渲染 mip 元素。

如果元素不在 viewport 内,强制触发元素的 viewportCallback firstInviewCallback 方法。

varelement =document.getElementById('mip-test');

MIP.prerenderElement(element);

event-action

由于mip不允许使用附加的JS代码。所以提供了一套事件action机制,可以通过dom属性来触发某个mip元素的自定义事件。

html:

<mip-testid="test"></mip-test>

<divon="tap:test.custom_event">不带参数</div>

<divon="tap:test.custom_event(test_button)">带参数</div>

<divon="tap:test.custom_event(test_button) tap:test.custom_event(test_button1)">多个事件</div>

JS:

// mip-test.js

define(function(require){

var customEle =require('cust omElement').create();

customEle.prototype.build =function(){

// 绑定事件,其它元素可通过 on="xxx" 触发

this.addEventAction("custom_event",function(event/* 对应的事件对象 */, str/* 事件参数 */){

console.log(str);// undefined or 'test_button' or 'test_button1'

});

};

returncustomEle;

});

MIP封装了单击,双击,滑动等手势,可在组件中使用,下面一聚教程网将为大家详细介绍MIP手势的用法。

    MIP封装了单击,双击,滑动等手势,可在组件中使用

    示例

                    var util = require('util');

                    var Gesture = util.Gesture;

                    var customEle = require('customElemenet').create();

                    var build = function () {

                    var gesture = new Gesture(this.element);

                    // on 可接受多个事件名做为参数,以空格分隔。如 gesture.on('tap swipe')

                    gesture.on('tap', function (event, data) {

                    // 原始事件。如tap事件是通过 touchend 触发,event为tap对应的touchend事件对象

                    console.log(event);

                    // gesture 计算后的数据。参数介绍见后面

                    console.log(data.type); // "tap"

                    });

                    };

    初始化参数介绍

    gesture 实例化时第二个参数可以传一个object做为配置参数

    示例:

                    // 默认阻止纵向滑动事件

                    var gesture = new Gesture(element, {

                    preventY: true

                    });

    具体参数介绍:

                preventDefault
                是否阻止默认事件
                preventX
                是否阻止横向滑动时的默认事件
                preventY
                是否阻止纵向滑动时的默认事件
                stopPropagation
                是否阻止事件冒泡

    默认参数:

                    // 如果初始化时不传入配置参数,会使用下面的配置进行初始化

                    {

                    preventDefault: false,

                    stopPropagation: false,

                    // 默认会阻止横滑的事件,考虑到浏览器横滑有很多默认操作,所以在这里默认阻止横滑

                    preventX: true,

                    preventY: false

                    }

    gesture 数据对象介绍

    数据对象做为事件处理函数的第二个参数传入。

    示例:

                    gesture.on('tap', function (event, data) {

                    console.log(data);

});

    通用字段:

                angle
                滑动角度,如横滑为0度
                deltaTime
                从开始到结束的时间间隔。单位是ms
                deltaX
                横轴位移
                deltaY
                纵轴位移
                direction
                方向。0: 未变动 1: 上 2:右 3: 下 4: 左
                distance
                移动距离
                pointers
                触摸点
                timeStamp
                事件发生的时间戳
                velocity
                速度
                velocityX
                横向速度
                velocityY
                纵向速度
                x                触摸中心点坐标x
                y                触摸中心点坐标y
                type
                事件类型

    扩展字段:

    各手势可以向数据对象中扩展字段。如 swipe 事件中的 swipeDirection 字段,具体请看手势识别器介绍

    手势识别器

    手势识别器可以接收 gesture 数据对象,并识别出具体手势,触发具体的手势事件。

    手势识别器对象在用户绑定事件时自动创建,在用户解绑事件时自动销毁。

    目前有三种内置识别器:tap、dobuletap、swipe

    tap

    使用方法:

    doubletap

    双击,如果同时绑定tap和doubletap,tap事件会延迟300ms触发以判断是否触发双击。

    使用方法:

                    gesture.on('tap', function (event, data) {

                    console.log('单击');

});

                    gesture.on('tap', function (event, data) {

                    console.log('双击');

});

    swipe

    滑动

    使用方法:

                    // 使用方法1:

                    gesture.on('swipe', function (event, data) {

                    console.log(data.type); // "swipe"

                    console.log(data.swipeDirection); // "up" or "right" or "down" or "left"

                    });

                    // 使用方法2:

                    gesture.on('swipeup swipedown', function (event, data) {

                    console.log(data.type) // "swipeup" or "swipedown"

                    console.log(data.swipeDirection) // "up" or "down"

                    });

本次一聚教程网为大家带来的是MIP开发辅助工具和模块介绍,mip内置了一些开发工具和模块,为解决一些mip开发中遇到的问题和支持原生JS。

1、替代 jquery、zepto

mip 不推荐使用 jquery 和 zepto。

为什么不推荐?

1、原生JS已经足够好用

2、jquery、zepto 性能相对于原生JS比较差

3、减少页面负担,不必引入额外的文件

没有jquery&zepto的情况下如何开发?

请参见后面的帮助,大部分都可以用原生JS替代,mip也提供了一些内置组件以解决兼容问题。

选择器推荐:

querySelector

querySelectorAll

// 全局

// jquery

$('selector');

// native

document.querySelectorAll('selector');

// 局部

varelement =document.getElementById('xxx');

// jquery

$('selector', element);

// native

element.querySelectorAll('selector');

// 另外原生也支持

element.getElementsByClassName

element.getElementById

element.getElementsByTagName

attr & data

//attr

//jquery

$element.attr('test');

$element.attr('test','123');

//native

element.getAttribute('test');

element.setAttribute('test','1');

element.hasAttribute('test');

//data

//jquery

$element.data('test');

$element.data('test','1');

//native

element.dataset['test'];

element.dataset['test'] ='1';

dom

var util =require('util');

// previousElement

// jquery

$element.prev();

// native

element.previousElementSibling;

// nextElement

// jquery$element.next();

// native

element.nextElementSibling;

// closest

// jquery

$element.closest(selector);

// mip

util.dom.closest(element, selector);

// contains

// jquery

jQuery.contains(parent, child);

// mip

util.dom.contains(parent, child);

// matches(判断element与selector是否匹配)

// mip

util.dom.matches(document.body,'body');

// true

// 其它常规操作

// native

element.appendChild

element.insertBefore

element.removeChild

element.innerHTML

element.textContent

css

// jquery

$element.css('display','none');

// mip

varutil =require('util');

util.css(element,'display','none');

util.css(element, {

left:100,

top:200

});

var arr = [element, element1, element2];

util.css(arr,'display','none');

class

// add

// jquery

$element.addClass('test');

// native

element.classList.add('test');

// remove

// jquery

$element.removeClass('test');

// native

element.classList.remove('test');

// has// jquery$element.hasClass('test');

// nativeelement.classList.contains('test');

// toggle

// jquery

$element.toggleClass('test');

// native

element.classList.toggle('test');

position&width&height

// position

// jquery

$element.position();

// native

element.offsetLeft

element.offsetTop

// offset

// jquery

$element.offset();

// mip

var util = require('util');

util.rect.getElementOffset(element);

ajax

异步请求使用 fetch 和 fetch-jsonp

fetch
fetch-jsonp

// get

fetch(location.href).then(function(res){

returnres.text();

}).then(function(text){

fetchElement.innerHTML ='fetch: '+ (text.search('mip-test') !==-1);

});

// jsonp

var fetchJsonp = require('fetch-jsonp');

fetchJsonp('xxx', {

jsonpCallback:' cb'

}).then(function (res) {

return res.json();

}).then(function (data) {

console.log(data);

});

event

// on、bind

// jquery

$element.on('click', fn);

// native

element.addEventListener('click', fn,false);

// off、unbind

// jquery

$element.off('click', fn);

// native

element.removeEventListener('click', fn);

// delegate

// jquery

$element.delegate(selector,'click', fn);

// mip

var util = require('util');

var undelegate = util.event.delegate(element, selector,'click', fn);

// mip

undelegateundelegate();

// trigger

// jquery

$element.trigger('click');

// native

var event= document.createEvent('MouseEvents');

event.initEvent('click',true,true);

element.dispatchEvent(event);

// mip

var util = require('util');

element.dispatchEvent(event, util.event.create('click', data));

util

varutil =require('util');

// extend

// jquery$.extend(a, b);

$.extend(true, a, b);

// mip

util.fn.extend(a, b);

util.fn.extend(true, a, b);

// isPlainObject

// jquery$.isPlainObject(obj);

// mip

util.fn.isPlainObject(obj);

// isArray

// jquery

$.isArray(obj);

// native

Array.isArray(obj);

// trim

// jquery

$.trim(str);

// native

str.trim();

浏览器判断

var util = require('util');

var platform= util.platform;

// IOS

platform.isIos();

// Safari

platform.isSafari();

// Chrome

platform.isChrome();

// Uc

platform.isUc();

// webkit

platform.isWebkit();

2、viewport 帮助

viewport 提供了视图相关的功能。

为什么要使用viewport?

1、提供一些视图相关的扩展功能
2、当页面被嵌入到iframe中,滚动以及页面相关的计算有一些bug

使用方式

var viewport =require('viewport');

// 获取 scrollTop

varscrollTop = viewport.getScrollTop();

// 设置 scrollTop

viewport.setScrollTop(20);

// 获取页面可视宽度

viewport.getWidth();

// 获取页面可视高度

viewport.getHeight();

// 获取页面实际宽度

viewport.getScrollwidth();

// 获取页面实际高度

viewport.getScrollHeight();

// 获取页面

Rectviewport.getRect();

// 页面 scroll 事件

viewport.on('scroll',function(){

// code

});

// 页面 changed 事件

// 当页面滚动结束,或者滚动速度比较低时,会触发 changed 事件

viewport.on('changed',function(){

// code

});

3、引入jquery or zepto

考虑到 jquery 和 zepto 有一定需求。 所以mip也为使用它们提供了异步引入的方式。

引入方式:

define(function(require){

var $ = require('jquery');

// or

var $ = require('zepto');

});

[!--infotagslink--]

相关文章

  • 浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • Framewrok7 视图介绍(views、view)使用介绍

    下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02
  • Monolog PHP日志类库使用详解介绍

    PHP日志类库在低版本中我们都没有看到了但在高版本的php中就有了,下面我们来看一篇关于PHP日志类库使用详解介绍吧. Monolog遵循PSR3的接口规范,可以很轻易的替换...2016-11-25
  • php获取当前url地址的方法介绍

    这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • 不错的mod_perl编程的简单应用实例介绍

    介绍性指南 mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现...2020-06-29
  • PHP 获取文件目录权限函数fileperms介绍

    在php中要获取或目录权限我们可使用fileperms函数来获取,fileperms() 函数返回文件或目录的权限,。若成功,则返回文件的访问权限。若失败,则返回 false。 例子 1 ...2016-11-25
  • php设置时区方法介绍

    php默认时区是欧美国家的所以与我们中国时区相差了整整8小时哦,下面我来给各位介绍php设置时区方法,有需要了解的朋友可进入参考。 在 php.ini 中,默认是 date.timez...2016-11-25
  • Android 组件开发之带label的文本输入框(EditText)

    文章给大家介绍Android 组件开发之带label的文本输入框(EditText),有需要了解的朋友可参考,希望此教程对各位有所帮助。 在Android开发中,我们的Activity都不免要用...2016-09-20
  • OpenCart网站迁移步骤详细介绍

    OpenCart是国外著名的开源电子商务系统,由英国人Daniel一人独立开发,其社区非常活跃,由各国网友翻译出来的语言包已经达到18种,其中包括中文,俄文,法文,西班牙文,德文等等,下面...2016-10-10
  • Mysql创建数据库和独立数据库帐号方法介绍

    本文章来给各位同学介绍phpMyadmin创建Mysql数据库及独立数据库帐号建立,如果你不会mysql命令来创建数据库之类的我们可以使用phpmyadmin来完成哦。 phpMyadmin创...2016-11-25
  • css的选择器的详细介绍

    选择器是可以选择指定那个样式了,今天我们来看一篇关于选择器的一个用法,希望这篇文章能够帮助到各位理解到css的选择器了,具体的细节如下文介绍。 前言 css选择器,是...2016-10-10
  • .net的命名空间类库的简单介绍

    .net的命名空间类库的简单介绍,需要的朋友可以参考一下...2020-06-25
  • php读取excel文件(.csv)实例介绍

    csv文件是一种纯文本文件,但利用excel文件打开可以当作excel文件使用,下面我来总结几个常用的读取excel的php实例。 PHP有自带的分析.csv函数:fgetcsv array fgetcsv...2016-11-25
  • css的四种隐藏方式介绍

    小编推荐的这篇文章介绍了css的四种隐藏方式,有需要的同学赶快来看看吧 1.opacity:0只是把元素隐藏起来了 ,但是还是占有布局,所以还是对布局有影响 ...2017-01-22
  • php 文件系统函数整理介绍

    本文章来给各位同学介绍一下关于一些常用的php 文件系统函数整理,希望这些东西对各位同学会有所帮助哦。 简介:本次介绍的是PHP中与文件操作相关的系统函数,这些...2016-11-25
  • php设置时区方法详解介绍

    在php中我们要设置时间的方法有很多种,最常用的就是直接在php.ini中进行修改了date.timezone,如果没有服务器权限可以直接使用date_default_timezone_set函数进行设置下...2016-11-25
  • 网站建设有什么策划技巧 网站建设策划技巧介绍

    策划技巧对于网站的建设是很重要的,这次文章就给大家介绍下网站建设有什么策划技巧,对此策划技巧感兴趣的下面我们一起来看看。 好多站长在网站建设的时候往往既要...2017-07-06
  • ArrayAccess接口介绍

    在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的系列文章中 你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP Library(SPL)。在 PHP5...2016-11-25