此项目是一个IPad上的Web App项目,页面的滚动用了最新的IScroll 5.0 插件, 确实是挺潮的。

项目用时 1个月 完成的, 准备今天晚上上线。

这是年前的最后一篇文章了,与众位博友分享下。

目录如下:

1 》--------------【iscroll 的 问题 】-------------------

2 》--------------【tap 点透 问题】-------------------

--------------【Html5 Css3 弹出层效果-分享】----------

项目截图如下:

首页效果》:

弹出层效果》:

拉动刷新加载》:

长话短说,就从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 != ) return;
$.ajaxLoading({
url: "@Html.Raw(Url.Action("SearchListByPage", "B2BProduct"))",
data: options,
type: "Get",
success: function (data) {
var newinfo = [];
for (var i = ; 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() + '</i></p></dd></dl></div>');
}
index == ? $("#pager").html(newinfo.join('')) : $("#pager").append(newinfo.join(''));
data.xcontent.length <= ? $("#pager").data("loadpage", "off") : index++ & $("#pager").data("page", index);
productSrcoll.refresh();
productSrcoll.maxScrollY =productSrcoll.maxScrollY - ;
}, 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 > || $(e.target).is(options.vid))) {
closeFlow();
}
e.stopPropagation();
}); /*--------------隐藏浮层----------------------*/
function closeFlow() {
$(options.vid).removeClass("slideLeft").addClass("hideSwing").css({ "opacity": "", "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": "",
"right": "",
"bottom": "",
"left": "",
"z-index": "",
"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()) / ) + "px",
"left": ((document.documentElement.clientWidth - $(options.vid).width()) / ) + "px",
"position": "absolute",
"z-index": "",
'margin': '0 auto',
'filter': 'alpha(opacity=100)',
'opacity': ''
}); $("#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
};
}
});

第一次,触碰Web App项目,栽过的那些坑。的更多相关文章

  1. 【饿了么】—— Vue2.0高仿饿了么核心模块&移动端Web App项目爬坑(三)

    前言:接着上一篇项目总结,这一篇是学习过程记录的最后一篇,这里会梳理:评论组件.商家组件.优化.打包.相关资料链接.项目github地址:https://github.com/66Web/ljq_el ...

  2. 第一次正式java web开发项目的总结

    去年下半年到现在,因为公司人员流动,也有好几个新进的员工分给我来带领,也有刚从学校出来的,在和他们交流的过程中,不由的想起自己刚刚进入这行的一些感想. 记得自己当初写过一篇总结的,我想这些对于刚出校门 ...

  3. Vue2.5 Web App 项目搭建 (TypeScript版)

    参考了几位同行的Blogs和StackOverflow上的许多问答,在原来的ng1加TypeScript以及Webpack的经验基础上,搭建了该项目,核心文件如下,供需要的人参考. package.j ...

  4. 如何优化运行在webkit上的web app

    如何优化运行在webkit上的web app 近来公司有个web app 项目运行在移动版android系统上,发现在电脑上跑的很流畅的web页面在移动版webkit上非常不流畅.根本无法和nativ ...

  5. Eclipse项目中web app libraries和 Referenced Libraries区别

    Referenced  Libraries是编译环境下使用的JAR包,所谓编译环境下使用的JAR包, 就是说你在Eclipse中进行源文件的编写的时候,所需要引用到的类都从Referenced  Li ...

  6. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  7. 项目红色感叹号eclipse因Web App Libraries中的jar包missing导致项目红色感叹号

    症状: 如题 分析: 修改.更换或者删除了WEB-INF/lib中的jar包 解决方案: 右击项目>build path>Libraries 直接remove Web App Librar ...

  8. 用weex create 创建app项目 报 ERROR in index.web.js from UglifyJs 错误!

    用weex create创建一个APP项目,安装依赖后运行报 这个是package.json index.web.js 在dist目录下是build时生成的. 上面的答案没有给大家细节,不好意思致歉下 ...

  9. Azure Web App (一)发布你的Net Core Web 项目

    一,引言 今天我们看一下Azure上的一个服务-----Web 应用,我们都知道云计算的三大模式:Iaas(基础设施即服务),Paas(平台即服务),Saas(软件即服务). Iass,其实就是虚拟主 ...

随机推荐

  1. Oracle 10G 安装后 不能卸载, 不能打开Web管理....

    1. 不能卸载. 点击这个卸载.   提示:   解决方法: 右键卸载, 设置兼容性为XP. 就可以使用了.    2. oracle10g登录em后,提示"java.lang.Except ...

  2. SpringMVC数据绑定全面示例(复杂对象,数组等)

    点击链接查询原文 http://www.xdemo.org/springmvc-data-bind/ 已经使用SpringMVC开发了几个项目,平时也有不少朋友问我数据怎么传输,怎么绑定之类的话题,今 ...

  3. 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)

      定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...

  4. 【转】前端图片该保存为什么格式?png or jpg?

    疑虑: 图片存储为web格式,该用什么格式保存呢?png?jpg?压缩比例该为多大?css spript的优劣?有时候我们可能会因为一张格式不正确的图片而导致设计品质的下降以及页面性能的降低.了解图片 ...

  5. substr_replace()函数:将手机号中间4位隐藏为*号

    <?php $mobile = "15810320826"; echo substr_replace($mobile,'****',3 , 4); ?> substr_ ...

  6. SDUT2482二叉排序树

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2482&cid=1184 题目描述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质 ...

  7. mapreduce程序编写(WordCount)

    折腾了半天.终于编写成功了第一个自己的mapreduce程序,并通过打jar包的方式运行起来了. 运行环境: windows 64bit eclipse 64bit jdk6.0 64bit 一.工程 ...

  8. hadoop:could only be replicated to 0 nodes, instead of 1

    在Hadoop的环境搭建过程中,常常会遇到类似这样的错误信息提示:“could only be replicated to 0 nodes, instead of 1 ”,产生这样的错误原因有多种,这 ...

  9. 无法将 grub-efl-amd64-signed 软件包安装/target/ 中

    64位win7下U盘安装64位ubuntu12.04,出现[无法将 grub-efl-amd64-signed 软件包安装/target/ 中]的错误 1. 已经确认为 12.04.2 的 Bug B ...

  10. 恢复被win7覆盖的Ubuntu Grub

    情景:本本装有Ubuntu 12.04 + Win7 32.重装Win7 64后,Ubuntu启动菜单被覆盖. 恢复的方法有多种,思路都一样.第一步,进入Linux环境:第二步.修改Grub使其重新覆 ...