Zepto-API知识梳理

2019-05-31  本文已影响0人  东邪_黄药师

Zepto

同jquery相似的语法

核心:​ --作为函数使用 ​ 参数: ​ 1、function(){} ​ 2、选择器字符串 ​ 3、html标签字符串 ​ 3、DOM code ​ --作为对象使用 ​ 方法; ​ 1、.each()
​ 2、.trim() ​ 3、.ajax() .get().post()
​ 4、.isArray() ​ jquery对象/zepto对象 ​ 概念:调用返回的就是 jquery对象/zepto对象 伪数组(有时候只有一个元素)

zepto同jquery不同的API

attr和prop

attr与prop的区别:
1、prop多用在标签的固有属性,布尔值属性。比如:a标签的href,class,selected,checked等。


在zepto中用attr也可以获取布尔值属性;
prop在读取属性的时候 优先级 高于attr,布尔值属性的读取还是建议用prop;
坑!------zepto中 removeProp()的方法。在1.2+版本才支持。
demo:

$(function(){
  $('option').each(function(index,item){
    //console.log(index,item)
    //console.log($(this).attr('selected'))
    console.log($(this).prop('selected'))
  })
})

DOM操作

jquery中插入DOM元素的时候添加配置对象(比如:id,class等。。。)不起作用。
Zepto 插入DOM元素的时候添加配置对象(id,class等。。)的时候可以添加进去,并且会直接显示在标签属性内,可以操作,影响DOM元素。

$(function(){
  var $p = $('<p> 这是新添加的p标签啊</p>',{
    id:'insert',
    class:'insert'
  })
  $('#box').append($p)
})

each方法:

jq:
.each(collection, function(index, item){ ... }) 可以遍历数组,以index,item的形式, 可以遍历对象,以key-value的形式 不可以遍历字符串。 z:.each(collection, function(index, item){ ... })
可以遍历数组,以index,item的形式,
可以遍历对象,以key-value的形式
可以遍历字符串。
遍历json对象以字符串的形式遍历。

offset()的区别

jq:

offset();
1、获取匹配元素在当前视口的相对偏移。
2、返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。

Z:

offset()
1、获得当前元素相对于视口的位置。
2、返回一个对象含有: top, left, width和height(获取到的width,height都是包含padding和border的值)

width(),height()区别:

jq:

jquery获取宽高的方法
1、width(),height()---content内容区的宽高,没有单位px
2、.css('width')----可以获取content内容区的宽高、padding、border的值,有单位px;
3、innerHeight(),innerWidth()---outerHeight(),outerWidth()来获取

Z:

zepto中的width(),height()是根据盒模型来取值的,包含补白和border的值。且不带单位。
zepto中没有innerHeight(),innerWidth()---outerHeight(),outerWidth()
.css获取的width,height是内容区的宽高,包含单位。
通过.css()获取padding,border的值

隐藏元素宽高:

jquery可以获取隐藏元素的宽高。
zepto无法获取隐藏元素宽高

事件委托:

原理:利用冒泡的原理将事件绑定到父元素/祖先元素身上,event.target指向的子元素
zepto:
1、委托同一个父元素身上
2、同一个世界
3、操作关联,操作对应的元素/类
4、顺序
5、谁操作的关联类就是谁触发的


在zepto中事件委托
委托的事件先被依次放入数组队列里,然后由自身开始往后找直到找到最后,期间符合条件的元素委托的事件都会执行。
1、委托在同一个父元素,或者触发的元素的事件范围小于同类型事件(冒泡能冒到自身范围)
2、同一个事件
3、委托关联 操作的类要进行关联
4、绑定顺序---从当前的位置往后看

touch Event:

$(function(){
        $('#btn1').on('touchstart',function(){
            alert('我是btn1');
        });
//      $('#btn1').off('click');
        //bind
        $('.btn2').bind('touchstart touchmove',function(){
            $(this).toggleClass("btnSty")
        });
        //one
        $('#btn3').one('click',function(){
            alert('我是btn3')
        });
        //trigger  自动执行
        $('#btn1').bind('myTouch',function(event,a,b){
            alert('我是由trigger触发的btn');
            console.log(a + ' ' + b);
        });
        $('#btn1').trigger('myTouch',['hello','world']);

        //unbind
        $('#btn2').unbind('touchmove');
        
    })
<script type="text/javascript">
    $(function () {
      //tap()点击事件---真机测没问题

//      $('#box').tap(function () {
//          alert('tap事件');
//      });
      $('#box').on('tap',function () {
          alert('tap事件');
      });
      //singleTap()单击事件
      $('#box2').singleTap(function () {
          alert('我单击了一下');
      });

      //doubleTap()  双击事件
      $('#box2').doubleTap(function () {
          alert('我双击了一下');
      });

      //longTap()长按事件----按住屏幕时间超过750ms触发
      $('#box3').longTap(function () {
          alert('我长按了一下box3');
      });

      //swipe()滑动事件---在同一个方向连续滑动超过30px

//      $('#btn').swipe(function () {
//          alert('我滑动了超过30px');
//      });
      $('#btn').swipeLeft(function () {
          alert('我向左滑动了');
      });
    });
  </script>

事件处理机制:

zepto有自己的一套事件机制,并且对不同的浏览器做了兼容的内部封装处理。

 $(function(){
    //简单绑定
    $('#box').on('touchstart',function(){
      alert('ddd');
    });
    //事件委托
    $('#box1').on('touchstart','p',function(){
      alert($(this).text());
    });
    //解除绑定事件
    //$('#box').off('touchstart');

    //一次函数
    $('#box2').one('touchstart',function(){
      alert('我就执行一次');
    });

  })

z中的form:

1、serialize()
* 在Ajax post请求中将用作提交的表单元素的值编译成 URL-encoded 字符串。---key(name)/value
2、serializeArray()
* 将用作提交的表单元素的值编译成拥有name和value对象组成的数组。
* 不能使用的表单元素,buttons,未选中的radio buttons/checkboxs 将会被跳过。
3、submit()
* 为 "submit" 事件绑定一个处理函数,或者触发元素上的 "submit" 事件。
* 当参数function没有给出时,触发当前表单“submit”事件,并且执行默认的提交表单行为,除非阻止默认行为。

 $(function(){
    //serialize()
    var list = $('form').serialize();
    console.log(list);
    //serializeArray()
    var listArr = $('form').serializeArray();
    console.log(listArr);
    //submit()
    $('form').submit(function(e){
        e.preventDefault();
        var data = $(this).serialize();
        console.log(data);
    })
  })

Ajax:

如何废除一个ajax请求 ----abort()方法

 <script type="text/javascript">
    $(function () {
      var xmlHttp = null;//初始化xmlHttp对象
      var isSend = false;//初始化判断按钮是否可以点击
      $('#btn').on('touchstart', function () {
        if(isSend === true){//如果不能点击,直接返回
            return;
        }
        $(this).css('background', 'gray');
        isSend = true;//修改为不能点击
        if(xmlHttp === null){//如果用户首次点击,发送请求
            xmlHttp = sendXmlHttp();
        }else{
            xmlHttp.abort();//再次点击的时候取消上一次请求
            xmlHttp = sendXmlHttp();//再次发送最新的请求
        }
        setTimeout(function () {
            $('#btn').css('background', 'red');
            isSend = false;//2s以后用户可以再次点击
        }, 2000);

      });
      //发送ajax请求的函数;
      function sendXmlHttp() {
        var xmlHttp = null;
        xmlHttp = $.ajax({
          type : 'GET',
          url : 'http://localhost:3000/',
          dataType : 'json',
          success : function (msg) {
            console.log(msg);
          },
          error : function (error) {
            console.log(error);
          }
        });
        return xmlHttp;
      }
    });
  </script>
上一篇 下一篇

猜你喜欢

热点阅读