项目总结-HTML5端

这是我来到Baicare的第二个移动端项目,也是第一个和IOS + Android交互的项目。在这次项目中碰到了很多问题,也查了一些资料解决了一些问题,但总体还是不够满意,主要是在于第三方插件的使用上,另外也收获了一些与Server端及客户端交互的经验。

Server端动态数据对接

Server端需要将我做的静态页面与动态数据绑定,期间遇到以下问题:

1. 在写html页面时,要保证可以模板化,便于动态页面搭建。例如,将所有页面的头、尾、及主体内容的页面架构保持统一;尽可能达到使用一个模板就能包含所有页面的布局。也需要事先与Server端确认页面及相关JS、CSS、image等文件的目录结构。

2. 为不同页面添加不同Class类名作为区分时,不要加在作为模板的标签上,而是要新增一个标签,便于Server端判断,如:

错误:<div class="school-wrapper detail-page"></div>

正确:<div class="school-wrapper"><div class=" detail-page "></div></div>

3. 在特殊的模块或者需要有判断的模块时,要添加详细的备注并与Server端沟通,确保功能完善及页面结构正确。

<!--若已收藏,添加类名:selected-->;

<!--若为官方活动则在header-container上添加official类名-->

4. 本地调试Ajax功能时,会创建json文件作为数据源,但是本地静态post调用时会报405 (Method Not Allowed)的错误。

原因:Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。

解决方案:

步骤1:在web.config里添加json的MIME类型

<system.webServer>

<staticContent>

<mimeMap fileExtension=".json" mimeType="application/x-javascript" />

</staticContent>

</system.webServer>

步骤2:Ajax中的post方法改为get方法

5. 本地调试完Ajax后,代码需切换成Server端正式使用的方法。

静态

$.ajax({

type: ‘get‘,

url: ‘XXX.json‘,

data: { ‘p‘: currentPage + 1 },

contentType: "application/json",

success: function (res) {

...

}

});

正式

$.post(‘XXX.json‘,

{ ‘p‘: currentPage + 1 },

function (res) {

...

}, ‘json‘);

客户端交互命令对接

在某些特殊页面上,HTML5页面需要与客户端进行交互,例如:点击分享按钮后,客户端需要接收到这个分享的操作信号,然后再通过客户端的原生代码进行分享的操作。

方法1:通过JS将命令以页面跳转的形式进行传递。

window.location.href = "baicareJSBridge://refresh";

方法2:通过<a>标签的href属性将命令进行传递。

<a href="baicareJSBridge://newPlayground"><img src="sites/img/i_post.png" /></a>

方法3:通过click事件,执行BaicareJSBridge方法,此方法会创建一个新的<iframe>标签,并将命令通过src属性进行传递。

不传参数:BaicareJSBridge.login();

传参数:       var param = {

"href": url

};

BaicareJSBridge.setLocation(param, function () { });

第三方插件的使用

这次嵌套使用了五个第三方插件,分别是youku API, iscroll, swiper, fastclick 和lazyload。总的来说,实现功能方面比自己写方便多了,但是却是一个大坑,有很多bug都是插件自身的bug,使用方较难修复,主要碰到的问题如下:

1. Youku API中的OnPlayEnd事件回调接口在移动端无效。和官方确认过,在移动端确实存在此问题,还未解决。

临时解决方案:

用setInterval方法实时监控,当player.currentTime()与player.totalTime()相同时,执行对应的操作。

2. iscroll在部分Android机器中会有单击一次,却会在当前位置点击两次的Bug。

解决方案:

修改iscroll.js中的代码
步骤1:去除onBeforeScrollStart里的阻止默认行为

onBeforeScrollStart:
function (e) {

//e.preventDefault();

}

步骤2:添加onBeforeScrollMove里的阻止默认行为

onBeforeScrollMove:
function (e) {e.preventDefault();}

步骤3:去除_end里的模拟事件

if
(target.tagName != ‘SELECT‘
&& target.tagName != ‘INPUT‘
&& target.tagName != ‘TEXTAREA‘)
{

ev = doc.createEvent(‘MouseEvents‘);

//ev.initMouseEvent(‘click‘,
true, true, e.view, 1,

//    point.screenX, point.screenY,
point.clientX, point.clientY,

//    e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,

//    0, null);

ev._fake = true;

target.dispatchEvent(ev);

}

3. iscroll在动态加载完数据或者dom的高度进行变化后,会产生拖动不正常的bug。

解决方案:

步骤1:在动态加载完数据后,调用refresh方法。

步骤2:在onScrollEnd回调函数中,调用refresh方法。

4. Swiper中的onClick回调函数在部分Android机中无效。

解决方案:

重新通过zepto.js定义click事件。

5. lazyload
+ iscroll:当动态数据加载完后,图片没有被刷新,仍然显示的是缺省图片。

解决方案:

在定义iscroll的onScrollMove回调函数中,添加$("#iscrollDomID").trigger(‘scroll‘);

时间: 2024-11-06 09:53:10

项目总结-HTML5端的相关文章

第31章 项目实战-PC端固定布局[1]

学习要点: 1.准备工作 2.创建项目 3.网站结构 4.CSS选择器 5.完成导航 主讲教师:李炎恢 本章主要开始使用学习用HTML5和CSS3来构建Web页面,第一个项目采用PC端 固定布局来实现. 一.准备工作 1.为了达到最低效果,第一个项目将采用1440x900的分辨率录制:因为,1024根本无法容纳最低宽度的页面:页面采用1280的最低宽度设计,去掉滚动条为1263像素. 2.第一个项目是PC端的固定布局,会采用像素(px)单位. 3.项目素材图片,是课外独立设计好的,课程不会去设计

第31章 项目实战-PC端固定布局8

第31 章项目实战-PC 端固定布局[8]学习要点:1.归类合并2.子导航 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.归类合并在前面几节课中,有一部分HTML 代码比较松散,没有统一到一个类别块里.比如:很多的标签超链接没有归类到UL 里,导致一些问题等.//松散的<a>标签<a href="###">曼谷(12)</a><a href="###">东京

第31章 项目实战-PC端固定布局7

第31 章项目实战-PC 端固定布局[7]学习要点:1.侧栏制作2.详细代码 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.侧栏制作本节课,主要设计一下内容页面的侧栏部分,分三个小块.经过思考,侧栏会包含一些图片,而主要部分也会包含图片,那么侧栏放在左边可能会和主栏的图片冲突导致不协调,所以,我们把侧栏更换到右边.//实际上,还去掉了高度,让其自适应#container {width: 1263px;margin: 30px auto

第31章 项目实战-PC端固定布局3

第31 章项目实战-PC 端固定布局[3]学习要点:1.搜索区2.插入大图3.搜索框 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.搜索区本节课,我们接着header 头部往下,来设计一块搜索区.这个区域,可以是广告大图,也可以是用户注册,也可以是一个搜索条,都是一个大幅背景,内嵌一个表单.具体造型如下:从表面上来分析,就是插入一张背景大图,然后居中一个搜索条.但是,我们要求最小在1280 分辨率.最大在1920 分辨率能保持最佳的观

第31章 项目实战-PC端固定布局5

第31 章项目实战-PC 端固定布局[5]学习要点:1.底部区域2.说明区域3.版权及证件区 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.底部区域本节课,我们将探讨一下首页中最底部的区域.这部分区域由两个部分组成,一个是说明内容,有:合作伙伴.旅游FAQ 和联系方式,还有一个就是版权声明及各种手续证件编号.//底部区域父元素<footer id="footer">...</footer>//底部父元

第31章 项目实战-PC端固定布局4

第31 章项目实战-PC 端固定布局[4]学习要点:1.热门旅游区2.标题介绍区3.旅游项目区 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.热门旅游区本节课,我们将探讨一下首页最核心的部分,旅游区.这块内容由两个部分组成,一个是大标题,表示热门旅游区域.其次就是旅游项目的图片展示区域.具体如下://热门旅游区父元素<div id="tour">...</div>//旅游父元素#tour {width

第31 章项目实战-PC 端固定布局10

第31 章项目实战-PC 端固定布局[10]学习要点:1.机票预定2.代码详解 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.机票预定机票预定页面,具体如下:二.代码详解//全部代码<form action="###"><h2>机票预定</h2><div class="type"><p>航程类型<mark>单程</mark>

第31章 项目实战-PC端固定布局9

第31 章项目实战-PC 端固定布局[8]学习要点:1.资讯内容2.代码详解 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.资讯内容和首页一样,只不过这里,布局方式有所不同,具体如下:二.代码详解//全部代码<figure class="tour"><img src="img/tour1.jpg" alt="曼谷-芭提雅6 日游"><figcaption&

第31章 项目实战-PC端固定布局6

第31 章项目实战-PC 端固定布局[6]学习要点:1.分离CSS2.头部区域3.内容区域 本章主要开始使用学习用HTML5 和CSS3 来构建Web 页面,第一个项目采用PC 端固定布局来实现.一.分离CSS本节课,我们将要创建一个新的页面:旅游资讯.那么,现在需要解决的问题是,如果把首页重复的部分移植到新的页面而减少冗余.最恰当的方法就是:将CSS 部分中重复的部分分离出来,单独创建一个CSS,以便后续的页面重复调用.而首页的HTML 重复的部分,一般是通过动态网页,比如PHP 等解决重复问