此項目是一個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' }); } }); }
----------------【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; }
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 }; } });