第一次,觸碰Web App項目,栽過的那些坑。

此項目是一個IPad上的Web App項目,頁面的滾動用了最新的IScroll 5.0 插件, 確實是挺潮的。javascript

項目用時 1個月 完成的, 準備今天晚上上線。css

這是年前的最後一篇文章了,與衆位博友分享下。html

目錄以下:java

1 --------------【iscroll 的 問題 】-------------------jquery

2 --------------【tap 點透 問題】-------------------css3

3 --------------【Html5 Css3 彈出層效果-分享】----------web

項目截圖以下:ajax

首頁效果》:app

彈出層效果》:ide

拉動刷新加載》:

 

長話短說,就從IScroll提及吧。

--------------【iscroll 的 問題 】-----------------

【1】. 動態加載某個模塊,發現iscroll 沒有 效果。

【2】. 使用jquery 的 (slideDown、slideUp )動畫效果,發現iscroll的滾動條算高度會有問題。

 【1】【2】的 解決方案:setTimeOut(function(){ new IScroll("#wrapper")  },100);

 

【3】:iscroll裏面的a連接點擊沒有效果。

解決方案:找到 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|A|IMG)$/ } 這句話,去掉 |A,就能夠了,由於默認禁用了。

 

【4】:使用iscroll拖動到頂部,加載下一頁數據。(此部分徹底能夠抽出來,作成一個通用的分頁,偸了個懶)

代碼片斷以下:

productSrcoll.on("scrollEnd", function () {
                        var y = -parseInt(productSrcoll.y);
                        var yHeight = -parseInt(productSrcoll.maxScrollY);
                        if (y >= yHeight) pullDownAction($("#pager").data("page"));
  });

//---------------------加載數據方法-----------------------------
var pullDownAction = function (index, options) {
            var option = CreateUrlLink();
            option.curpage = index;
            options = $.extend(option, options || {});
            if ($("#pager").data("loadpage") && index != 1) return;
            $.ajaxLoading({
                url: "@Html.Raw(Url.Action("SearchListByPage", "B2BProduct"))",
                data: options,
                type: "Get",
                success: function (data) {
                    var newinfo = [];
                    for (var i = 0; i < data.xcontent.length; i++) {
                        var item = data.xcontent[i];
                        newinfo.push('<div class="pic"><dl><dt>', '<a id="' + item.INFOID + '" href="/B2BProduct/Details?id=' + item.INFOID + '"><img src="' + item.IMAGE + '" /></a>',
                                    '</dt><dd><p>' + item.INFOTITLE + '</p><p>單價:¥<i>' + item.PRICE.toFixed(2) + '</i></p></dd></dl></div>');
                    }
                    index == 1 ? $("#pager").html(newinfo.join('')) : $("#pager").append(newinfo.join(''));
                    data.xcontent.length <= 0 ? $("#pager").data("loadpage", "off") : index++ & $("#pager").data("page", index);
                    productSrcoll.refresh();
                   productSrcoll.maxScrollY =productSrcoll.maxScrollY - 100;
                }, error: function () {
                    $.MsgBox({ msg: "出現問題了", tipType: 'warning' });
                }
            });
        }
View Code

 

----------------【tap 點透 問題】------------------------

原由:因爲我給頁面大量用了 tap, 解決了click點擊的延遲問題,同時也帶來了新的問題。

若是我給document綁定tap事件,若是,彈層模板下面,有個元素也綁定了,此時就會出現點透的問題。

1. tap的 」點透「 問題。

推薦 你們能夠看看 , 葉小釵 關於 「點透」 問題的文章分析:http://www.cnblogs.com/yexiaochai/p/3442220.html

解決方案:fastclick , 確實是解決了這個問題。

解決方案地址:http://blog.youyo.name/archives/zepto-tap-click-through-research.html

 

---------------【Html5 Css3 彈出層效果-分享】----------------------------------------------

css3 的 代碼以下:

/****************彈出框效果 樣式****************************/
.slideDown { animation-name: slideDown; -webkit-animation-name: slideDown; animation-duration: 0.3s; -webkit-animation-duration: 0.3s; animation-timing-function: inherit; -webkit-animation-timing-function: inherit; visibility: visible !important; }
 @keyframes slideDown {  0% {
 transform: translateY(-100%);
}
 100% {
 transform: translateY(0%);
}
}
 @-webkit-keyframes slideDown {  0% {
 -webkit-transform: translateY(-100%);
}
 100% {
 -webkit-transform: translateY(0%);
}
}
.slideLeft { animation-name: slideLeft; -webkit-animation-name: slideLeft; animation-duration: 0.7s; -webkit-animation-duration: 0.7s; animation-timing-function: ease-in-out; -webkit-animation-timing-function: ease-in-out; visibility: visible !important; }
 @keyframes slideLeft {  0% {
 transform: translateX(150%);
}
 50% {
 transform: translateX(-8%);
}
 65% {
 transform: translateX(4%);
}
 80% {
 transform: translateX(-4%);
}
 95% {
 transform: translateX(2%);
}
 100% {
 transform: translateX(0%);
}
}
 @-webkit-keyframes slideLeft {  0% {
 -webkit-transform: translateX(150%);
}
 50% {
 -webkit-transform: translateX(-8%);
}
 65% {
 -webkit-transform: translateX(4%);
}
 80% {
 -webkit-transform: translateX(-4%);
}
 95% {
 -webkit-transform: translateX(2%);
}
 100% {
 -webkit-transform: translateX(0%);
}
}
.hideSwing { transform: translateX(300px); -webkit-transform: translateX(300px); transition: all 0.3s ease 0s; -webkit-transition: all 0.3s ease 0s; }
View Code

 js 的 代碼以下:

$.extend({
    /*----------通用*CSS3*彈出層-----------------*/
    clickFlowBox: function (options) {
        var defaultOption = {
            vid: '',             //--彈出層
            clickID: '',         //--點擊對象
            eventType: 'click',  //---點擊事件類型
            invokeFun: null,     //--點擊擴展調用的方法
            documentTapFun: null,//document的擴展方法
            isMask: true         //--是否顯示圖層模板
        };

        var cancel, mask;
        //--------------重組合並-----------------------
        options = $.extend(defaultOption, options || {});

        //----------------點擊彈出層事件---------------
        $(options.clickID).on(options.eventType, function (e) {
            e.stopPropagation();

            var returnFunBool = true;

            //---------------click: 自定義事件----------------------------
            if (typeof options.invokeFun === 'function' && options.invokeFun) {
                returnFunBool = typeof options.invokeFun.apply() == Boolean ? options.invokeFun.apply() : true;
            }

            if (returnFunBool) {
                showFlow();
            }
        });

        //---------------document: 自定義事件----------
        $(document).on("click", function (e) {
            if (!($(e.target).parents(options.vid).length > 0 || $(e.target).is(options.vid))) {
                closeFlow();
            }
            e.stopPropagation();
        });

        /*--------------隱藏浮層----------------------*/
        function closeFlow() {
            $(options.vid).removeClass("slideLeft").addClass("hideSwing").css({ "opacity": "0", "filter": "alpha(opacity=0)", "z-index": "-1" });
            //$(cancel).remove();
            $(mask).removeClass("slideDown").remove();
        }

        /*--------------顯示浮層----------------------*/
        function showFlow() {
            //cancel = $("<div id=\"cancel-Mask\"><a href='javascript:;' id='closeIconRoate'>×</a></div>");
            mask = $("<div id=\"maskOfDiv\"></div>"); //--Div遮罩----
            if (options.isMask) $("body").append(mask)

            var sh = document.documentElement.scrollHeight,
                ch = document.documentElement.clientHeight,
                height = sh > ch ? sh : ch;
            var cssOption = {
                "position": "absolute",
                "top": "0",
                "right": "0",
                "bottom": "0",
                "left": "0",
                "z-index": "1000",
                "background-color": "#000000",
                "display": "none",
                "filter": "alpha(opacity=70)",
                "opacity": "0.7",
                "height": height
            };

            mask.css(cssOption);

            $(options.vid).css({
                "top": ((document.documentElement.clientHeight - $(options.vid).height()) / 2) + "px",
                "left": ((document.documentElement.clientWidth - $(options.vid).width()) / 2) + "px",
                "position": "absolute",
                "z-index": "1002",
                'margin': '0 auto',
                'filter': 'alpha(opacity=100)',
                'opacity': '1'
            });

            $("#closeIconRoate").css("style", "color:#FFFFFF;background:#FFFFFF");
            $(mask).addClass("slideDown").show();
            $(options.vid).removeClass("hideSwing").addClass("slideLeft").css("display", "block");
        }

        /*---------對外暴露公開調用的方法-------------*/
        return {
            CloseBox: closeFlow,
            ShowBox: showFlow
        };
    }
});
View Code
相關文章
相關標籤/搜索