2017.11.29 Js中event、AppCan前端优化、clearForm()、 Positive、 jquery 中post 、get的同步问题

第一组:杨昊 Js中event中的几个对象的对比

之前老刘在项目中遇到这样一个问题:需要将AngularJS中的modal弹出层设置为可拖动(详情咨询刘聪),虽然功能是实现了,但是复制的代码没有理解,其中出现了event.PageX等字段,经过我上网查询,终于了解这些对象的差异。现在我将这些常见的对象的区别分享给大家。

首先,拖拽功能说到底是布局定位原理,虽说是动态的,但是起止位置的怎么计算,这就涉及到以上几个对象。

以下内容转载自:http://blog.csdn.net/javaloveiphone/article/details/50956201

pageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,同一个元素坐标不随滑动条移动而变化

clientX:鼠标在页面上可视区域的位置,即是以浏览器滑动条此刻的滑动到的位置为参考点,同一个元素坐标随滑动条移动而变化.

注:

  1. 如果元素位于body中,e.clientX + document.body.scrollLeft - document.body.clientLeft = e.pageX,

  2. e.clientX包括了body的边框,document.body.scrollLeft也包括了body边框,body表框运算重复,减去document.body.clientLeft,即去掉重复的body边框

screenX:获取到的是触发点相对显示器屏幕左上角的距离,不随页面滚动或浏览器移动而改变

offsetX:获取到的是鼠标触发点相对于目标事件元素(被触发DOM)左上角的距离(确切的说是到边框外边界的距离),其中在IE中以内容区左上角为基准点不包括边框,如果触发点在边框上会返回负值,而chrome中以边框左上角为基准点。

layerX:获取到的是鼠标触发点相对于offsetParent元素左上角的距离(确切的说是到边框外边界的距离),包括中间所有元素的padding、margin、border及元素宽度值之和),其中在IE中以内容区左上角为基准点不包括边框,如果触发点在边框上会返回负值,而chrome中以边框左上角为基准点。

注:关于offsetParent元素

  1. 如果当前元素的祖先元素没有进行CSS定位(position为absolute或relative),offsetParent为body。

  2. 如果当前元素的祖先元素(包括当前元素)中有CSS定位(position为absolute或relative),offsetParent取最近的那个祖先元素(包括当前元素)。

总结:

  1. 使用pageX获取带滚动条的到页面边缘尺寸

  2. 使用clientX获取到浏览器可是区域的尺寸,没有滚动条,pageX == clientX

  3. 使用screenX获取到屏幕边缘尺寸

  4. 使用offsetX获取到当前元素边缘尺寸

  5. 使用layerX获取到offsetParent边缘尺寸


第二组:赵彩凤 AppCan前端速度优化方案续

1. API概览
方法:

初始化下拉刷新和上拉加载
initPullDownRefresh(pullDownRefreshCallback, pullUpLoadingCallback, isShowTips)

说明:初始化下拉刷新和上拉加载
参数:


2017.11.29 Js中event、AppCan前端优化、clearForm()、 Positive、 jquery 中post 、get的同步问题_第1张图片
沙发的.png

示例:

    /**
     * 下拉刷新和上拉加载
     * Scroll BOX function DEMO START
     */
    (function ($) {
        //初始化下拉刷新
        initPullDownRefresh(
                //下拉刷新的回调
                function () {
                    console.log("下拉刷新");
                }
                //上拉到底部的回调
                , function () {
                    console.log("上拉加载");
                }
                //是否显示提示语
                , true
        );
    })($);

注意事项:

  • 调用该方法初始化下拉刷新和上拉加载时须放在(function ($) {})($)之间,否则无效果
  • 如不想调用下拉刷新,不调用该方法或者删除appcan.scrollbox.js都可以;
  • 提示语即是下拉刷新的样式,为了统一风格,将其写在appcan.scrollbox.js中已便复用,如不满意,可以在appcan.scrollbox.js中自行修改
/**
* 初始化下拉刷新
*
* @param pullDownRefreshCallback 下拉刷新的回调
* @param pullUpLoadingCallback 上拉到底部的回调
* @param isShowTips 是否显示提示语
*/
function initPullDownRefresh(pullDownRefreshCallback, pullUpLoadingCallback, isShowTips) {
 var $el = $("body");
 var isShowTipsCurrent = true;
 if (isShowTips != null) {
     isShowTipsCurrent = isShowTips;
 }
 scrollViewInstance = $.scrollbox($el);
 scrollViewInstance.on("releaseToReload", pullDownRefreshCallback
 ).on("onReloading", function (a) {//if onreloading status, drag will trigger this event
 }).on("dragToReload", function () {//到达下拉刷新的边界 drag over 30% of bounce height,will trigger this event
 }).on("draging", function (percent) {//正在下拉on draging, this event will be triggered.
 }).on("scrollbottom", pullUpLoadingCallback);

 if (isShowTipsCurrent == false) {
     return;
 }
 //这里可以定义下拉的样式
 $('#draging').html('下拉刷新');
 $('#dragToReload').html('释放更新');
 $('#releaseToReload').html('加载中');
}
主动调用下拉刷新

pullDownRefresh()
说明:主动调用下拉刷新
参数:无
示例:

    //插件加载完成的回调
    appcan.ready(function () {
        console.log("appcan.ready");
        //手动调用下拉刷新
        pullDownRefresh();
    });
结束下拉刷新

endPullDownRefresh()
说明:结束下拉刷新
参数:无
示例:

    /**
     * 下拉刷新和上拉加载
     * Scroll BOX function DEMO START
     */
    (function ($) {
        //初始化下拉刷新
        initPullDownRefresh(
                //下拉刷新的回调
                function () {
                    console.log("下拉刷新");
                    endPullDownRefresh();
                }
                //上拉到底部的回调
                , function () {
                    console.log("上拉加载");
                }
                //是否显示提示语
                , true
        );
    })($);
2. 打开新页面时input自动获得焦点并弹出键盘

在appcan.ready的回调中获得input标签的焦点,并调用uexWindow.showSoftKeyboard()方法即可。

调用uexWindow.hideSoftKeyboard()隐藏键盘

    //插件加载完成的回调
    appcan.ready(function () {
        console.log("appcan.ready");
        //input输入框获得焦点
        $('#input1').focus();
        //弹出键盘,延时弹出体验更好
        setTimeout(function () {
            uexWindow.showSoftKeyboard();
        }, 500);
    });

第三组:黄华英 clearForm()和restForm()

1. clearForm()

有时候可能需要实现这样的效果:使用ajax提交表单,成功提交表单之后将表单清空
一般情况下我是将需要清空的元素逐个清空比如:

$("input").val(''); 
$("textarea").val(''); 

或者是将需要清空的元素全部加上相同的class然后$(".clear").val('')

最近发现其实还有一个方法: clearForm()

clearForm()用来清空表单中的元素,将所有的文本框(text)、密码框(password)、文本域(textarea)元素置空,清除下拉框(select)的选定以及将所有的单选按钮(radio)和多选按钮(CheckBox)重置为非选定状态。

调用:$("#clear").clearForm();

以上是将整个表单清空,但是如果只需要清空部分表单元素,我们可以使用clearFields().

调用:$("#clear .needclear").clearForm();

将ID为clear的表单内class为needclear的元素清空

2. restForm()

和clearForm()方法有点像…

但是clearForm()是清空,restForm()是重置。restForm()通过调用表单元素原有的DOM方法重置表单到初始状态,即将页面恢复到刚加载完的状态。(一键还原)
调用::$("#rest").restForm();


第四组:王芳 Positive

Css有三种基本的定位机制:普通流、浮动和定位。

普通流是指元素最基本的排列方式,比如块级元素占一行,行内元素可以在一行中一个个排下去等等,一般可以使用margin和padding来调整元素的位置,也可以使用display来改变元素的属性,inline-block是比较常用的一种。

浮动就是float。

定位是指通过改变元素的positive属性来改变元素的位置,有static、relative、absolute、fixed四种属性值,其中static是默认的。改变了positive属性之后可以使用top、bottom、left和right来确定元素的具体位置,还可以使用z-index来给元素进行层次分级。

  1. Relative:相对定位。相对于元素原本的位置进行移动。仍旧保留了原来所占的空间。

  2. Absolute:绝对定位。相对于 static 定位以外的第一个父元素进行定位,如果不存在这样的父元素,则依据最初的包含块,根据用户代理的不同,最初的包含块可能是画布或html元素。这种定位中元素不占空间了,和浮动类似。

  3. Fixed:固定定位。通俗来说就是相对于浏览器窗口定位,这个用得还是蛮多的,像回到顶部按钮,京东首页两侧的购物菜单等等。


第五组:姜葳 jquery 中post 、get的同步问题

  1. 在全局设置:
$.ajaxSetup({  
    async : false  
});
然后再使用post或get方法
$.get("register/RegisterState", {test : 12}, function(data, status) {  
    if (status == "success") {  
            data = eval("(" + data + ")");  
        aDataSet = data;  
        alert("data is " + aDataSet);  
    } else {  
            alert("wrong");  
         }  
});  
  1. 直接使用$.ajax
$.ajax({  
          type : "post",  
          url : "register/RegisterState",  
          data : "test=" + test,  
          async : false,  
          success : function(data){  
            data = eval("(" + data + ")");  
            aDataSet = data;  
          }  
 });

你可能感兴趣的:(2017.11.29 Js中event、AppCan前端优化、clearForm()、 Positive、 jquery 中post 、get的同步问题)