我的第一个上线H5页面

我的第一个任务是做一个h5的拉新页面

设计稿

功能说明

在贝贝的贝壳任务新增"听儿歌赢奖励",期望能拿到更多拉新资源;

  • 奖励1,播放儿歌赢奖励
  • 每天抓取昨日播放量最高的前6个专辑;
  • 用户默认访问时展示前3个,点击换一换更换后3个;
  • 点击后直接进入播放器,播放内容是专辑的第一个内容;
  • 点击页面上专辑位置,认为用户进行了1次播放,后端加1贝壳;
  • 每个用户每天最多加3个;
  • 奖励2,下载早教宝送30贝壳
  • 点击按钮,跳转下载地址,安卓直接下载,iOS跳转到Appstore下载,下载成功+30贝壳;
  • 奖励3,展示早教宝内的内容
  • 展示内容,点击跳转下载地址。

如果这只是一个屋限制的单张页面,其实写起来很容易的,用我以前所学的只是,不到半天的时间就可以写出这样一张页面。但在公司就没有这么简单。一个公司代码量庞大,公司内部自己封装了许多经常用的函数,而且app用户量庞大,我们必须考虑到个方面的性能问题。

下面开始讲代码的问题

编辑器

公司开发大都用vscode编辑器,它和sublime很相似,但是它有更强大的功能

代码结构

公司内部封装好了,当需要新建一个页面时,运行

npm run newpage party/activity

会自动给你生成一个文件夹,文件夹下面包括四个文件

xtpl:是xtemplate的缩写,它是一种模板语言,和ejs类似。很多电商网站,如淘宝都使用这个模板语言。我们可以把列表渲染等拼接字符串丢到xtemplate里面,这样可以使我们的代码看起来简洁美观。

less:less的好用之处在于让我们的css和html一样具有层级关系,让我们的代码给具有可读性和可修改性。但要注意的是,层级嵌套不要太深,最多三级。因为浏览器读取的时候是从最里层向外找得。比如最里层是p,那就会找到页面中所有的p在找它的父级,很明显这样耗时。而我们又希望达到向html一样的层级关系,我们可以用&。下面是代码示例

.activity {
  width: 100%;
  letter-spacing: 2/@bs;
  font-size: 26/@bs;

  img {
    display: block;
    width: 100%;
  }
  &_music {
    margin-top: -10/@bs;
    padding: 6/@bs 40/@bs;
    height: 345/@bs;
    background-image: url(http://h0.hucdn.com/open/201804/5036d34bc97103eb_750x333.png);
    background-size: 100% 100%;
  }
}
    

最终“&_music”会被解析为“.activity_music”而不再是“.activity .music”

HTML

我们应该把html中需要和后端交互的一部分放在xtemplate中,然后通过js去将它添加到某个节点下

CSS

图片小缝隙问题

因为我写的是一张h5的拉新页面,页面的复用性不强,所以不需要点击的部分都是直接通过截图来实现的。

    <div class="reward1">
            <img src="http://h0.hucdn.com/open/201804/a092bae6fe513b30_750x335.png">
            <div class="activity_music">

            </div>
        </div>
        <div class="reward2">
            <img src="http://h0.hucdn.com/open/201804/269bd63c6bf51ee2_749x87.jpg">
            <img src="http://h0.hucdn.com/open/201804/76ad4d5de5f7aa8d_749x454.jpg" class="download" data-text=‘奖励二‘>
        </div>
        <div class="reward3">
            <img src="http://h0.hucdn.com/open/201804/e832a8c05b217e81_750x102.jpg">
            <img class="download" src="http://h0.hucdn.com/open/201804/7439e89b1ef75c84_749x910.jpg" data-text=‘奖励三‘>
        </div>
        <div class="reward4">
            <img src="http://h0.hucdn.com/open/201804/704e66e11bd5863f_750x494.png">
        </div>
    </div>

这样会造成每个img后面都有一个小缝隙。这个小缝隙是怎么产生的呢,可以参看张鑫旭的CSS深入理解vertical-align和line-height的基友关系

简单的说,我把img放在div里面

<div class="mask">
    <img src="http://h0.hucdn.com/open/201804/70999dd4e4598fe4_100x100.png">
</div>

在img后面会有一个很小的方块以这样的方式跟在它后面

要解决这个问题有这样几种方案

  • 最简单的方法是将div和img之间的所有空格都去掉,向这样写

    <div class="mask"><img src="http://h0.hucdn.com/open/201804/70999dd4e4598fe4_100x100.png"></div>

    你可以这样理解,行内元素将自己包裹起来,同一行内允许其他元素存在,所以我们在书写html时div和img之间留了空隙,网页上自然就也有缝隙。但是这种方法不推荐使用,因为这样书写不美观,而且有的编辑器会自动为你添加缩进。

  • 将img的display设为block。因为这个原因是由img的display默认为inline-block造成的,所以我们将img的dispaly设为block让它变成块级元素就可以了。块级元素自占整个一行,将img设为block就没有元素可以和它共享这一行的位置了。
  • 将父级的font-size设置为0。一个空格相当与一个字,将font-size设为0了之后,这个字将不再占用空间。但使用这个方法的时候要注意,一定要在它的子集里面重设font-size,不然真正的文字也变得看不见了。
  • 给img设置float:left。这样做也不好,还需要去清除浮动。
  • 将vel-align设为bottom。这样改变img与小方块的对其方式其实小白块还是存在,只是在纵向就看不出来了。

    div大小固定问题

我在做一个列表展示的时候,使用了flex让它自适应为3块,于是就没有给它设置宽高了。但是我没有考虑到的是有可能它的标题很长,这样的话它就会自动将文字放到下面一排,这样效果就很丑了。所以我需要设置它的宽高,并且overflow:hidden这样即使它溢出也不会改变样式了。

box-sizing

我在写一段代码的时候,背景是切的一个图片,而我在width等于图片大小后,有对div设置了padding。这样我其实拉伸了背景图片,虽然效果影响不大,但是代码还是欠严谨。毕竟这几px的距离,可能是UI构思了很久的结果

js

整体思路

  • 先引入一些插件
  • 新建一个xtemplate模板
  • Promise.polyfill()如果游览器不支持,帮你自动修补
  • 拿数据
  • 定义一些共用的函数
  • 建一个class
  • constructor中放一些共用的变量和需要执行的函数
  • 定义一些只有在class里面在会用到的函数
  • 启动页面

    ```

    ‘use strict‘

import ‘./index.less‘

/eslint-disable no-unused-vars/

import sentry from ‘@base/sentry/zaojiaobao_m‘

import Promise from ‘es6-promise‘

import Xtemplate from ‘xtemplate/lib/runtime‘

import tmpl from ‘./index.xtpl‘

import { ajax, authenticationHandle } from ‘commons/js/tools.js‘

import Hybrid from ‘@base/simple_hybrid‘

import { sendLog, pageStart } from ‘libs/log/log2.js‘

const tpl = new Xtemplate(tmpl)

Promise.polyfill()

const getData = () => {

return ajax({

method: ‘GET‘,

query: {

method: ‘beibei.education.weal.reward.list‘

}

})

}

class Page {

constructor() {

Hybrid(‘customNavBarRightBtn‘).customNavBarRightBtn({

//默认隐藏右上角分享按钮

hidden: true

})

}

}

pageStart()

new Page()

### 需要编写的函数
#### 将音乐渲染到页面中
因为音乐有多首,所以我采用xtemplate去渲染它们
    {{#each(albums)}}



  • {{title}}
  • {{/each}}

今天已收听 {{listen_count}}首,获得 {{get_shell_count}}个贝壳 换一换

这里需要注意的是,我用到了data-id和data-target这些属性,这是为了在js中我更方便去取到需要的数据
js部分

getData()

.then(res => {

this.res = res

this.albums = [res.albums.slice(0, 3), res.albums.slice(3, 6)]

this.res.albums = this.albums[0]

this.$music.html(tpl.render(this.res))

})

.catch(err => {

popup.note(err.message || err.err_msg || JSON.stringify(err))

})

这段函数放到class的constructor里面。这里用到了promise的异步请求,将请求成功的操作放在then里面,报错放在catch里面。catch几种报错是为了记录报错的设备。

因为一共有六条数据,但是页面只显示三条数据,如果我将六条数据全交给模板,会造成样式混乱。而且因为换一换需要的是前三条数据和后三条数据的切换,所以我将数据切好放在一个数组中,为换一换做好准备
#### 点击换一换切换音乐

let _this = this

this.$music.on(‘click‘, ‘.changMusic‘, function() {

sendLog({

type: ‘click‘,

params: {

block_name: ‘点击换一换‘

}

})

if (_this.res.albums === _this.albums[0]) {

_this.res.albums = _this.albums[1]

} else {

_this.res.albums = _this.albums[0]

}

_this.$music.html(tpl.render(_this.res))

})

这里的思路是判断当前状态,如果是前三个就切换到后三个

sendLog是一个已经封装好了的函数,通过这个记录用户的动作,方便运营对数据进行分析。
#### 点击奖励二或三跳到下载页面

this.$activity.on(‘click‘, ‘.download‘, function() {

let text = $(this).attr(‘data-text‘)

sendLog({

type: ‘click‘,

params: {

block_name: ‘点击领取聪明豆下载‘,

text: decodeURIComponent(text)

}

})

authenticationHandle(() => {

ajax({

method: ‘POST‘,

query: {

method: ‘beibei.education.download.reward.check‘

}

})

download()

})

})

```

这一部分的逻辑就是点击的时候跳到下载,但是要登录之后才可以下载。

authenticationHandle()是封装好的登录函数,download是封装好的下载函数。

谈一谈this

见我的另一篇文章this的指向和用法

完整代码https://github.com/hyz1997/beibei-edu-activty

原文地址:https://www.cnblogs.com/huyuzhu/p/8349803.html

时间: 2024-10-16 05:03:41

我的第一个上线H5页面的相关文章

H5页面的基本测试点

优势: H5可以跨平台使用,开发成本相对较低 H5可随时上线就更新版本,适合快速迭代 H5可以轻量的触达用户,提供更便捷的服务 在微信入口或者浏览器上,用户只需点开链接就可以获取我们锁提供的服务 劣势: H5->app的转化强依赖于浏览器 H5目前基本无法将数据存储在本地,依赖实时性数据,网络状态不好的时候卡到哭. 性能相对较低,影响用户体验 如何判断是否是H5页面: 基本上只要对那个view长按,然后看是不是有反应,比如手机震动(Android).或者出现文字选择粘贴(Android/iOS)

H5页面测试app测试

H5页面介绍 1. H5页面H5即 HTML5,是最新的 Web 端开发语言版本,大多数手机 APP 页面会用 H5 实现,包括 PC Web 站点也会用它开发实现.所以 Web 的通用测试点和方法基本都可以适用于它.H5其实就是:移动端Web页面.H5应用在很多地方,如APP的活动专题页面.新闻页面.微信公众号文章页面等都属于H5页面,在PC或者手机浏览器都可以直接访问H5页面.H5作为移动端的web页面,有它自身的优势,如它可以跨平台使用,开发成本相对较低:可随时上线就更新版本,适合快速迭代

【干货】微信场景之H5页面制作免费工具大集合

营销代有手段出,各领风骚数百天.要说现在哪些营销方式最能传播,屡屡刷爆朋友圈的H5页面肯定就是首当其冲的,提到H5页面,就立马想到"围住神经猫",上线微信朋友圈3天的时间便创造了用户500万,访问量超1亿的神话. H5如此势头,不得不让营销人对H5页面的未来充满了期待,越来越多的人开始在营销中运用H5页面.其实在移动端各个领域,H5页面的叫法很多,也会称为翻翻看.手机微杂志.广告页.场景应用.海报\画报(动态海报.指尖海报.掌中海报.动画海报.微画报.微海报)等等,经常能见到的就是滑动

移动端h5页面的设计稿尺寸

当我们在做手机端H5网页设计稿时(当然包含微信端的H5网页设计),如果没有做过类似的移动端的设计,UI设计师和前端工程师肯定会纠结的.如果是app设计师,就不会那么纠结啦. 延伸阅读: 2015年度最值得学习的10个H5案例(各种经典,推荐收藏) 这可能是近半年做得最好的4个H5传播案例 还没搞懂H5营销?他们已经开始在玩“虚拟现实”了! 一个插线板的H5怎么就火了?大家明明是去看周鸿祎的八卦的 那么多手机屏幕尺寸,设计稿应该按照哪一个尺寸作为标准尺寸.现在已经有2K分辨率的手机屏幕了,设计稿是

使用Flexible实现手淘H5页面的终端适配

/*使用方式:在页面顶部引入flexible.js,将页面视觉设计稿切成10份,例如640px宽的视觉设计稿可切分成10个64px宽,以此为基准,手动计算页面中元素宽高和字体相对于64px比值,将这个比值作为元素宽高或字体大小的rem值即可*/ 曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论-- 手淘的H5页面是如何实现多终端的适配 ? 那么趁此 

C#开发微信门户及应用(44)--微信H5页面开发的经验总结

在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页面,给我们提供了很大的便利,本文是在自己做的一些H5微信应用页面上做了一些功能总结,希望能够给大家提供一定的帮助. 1.微信网页开发 1) JSSDK 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语

使用Flexible实现手淘H5页面的终端适配(转)

曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论——手淘的H5页面是如何实现多终端的适配? 那么趁此Amfe阿里无线前端团队双11技术连载之际,用一个实战案例来告诉大家,手淘的H5页面是如何实现多终端适配的,希望这篇文章对大家在Mobile的世界中能过得更轻松. 目标 拿一个双11的Mobile页面来做案例,比如你实现一个类似下图的一个H5页面: 目

[转]h5页面测试总结

转自http://www.blogjava.net/qileilove/archive/2014/07/24/416154.html?utm_source=tuicool H5页面测试总结 其实经过几次H5页面测试之后,发现存在很多共同的问题,所以在此对H5页面的测试点(以及容易出问题的点),做一个总结,给开发同学自测,以及准备入手H5测试的同学一个参考. 1.业务逻辑相关 除基本的功能测试之外,H5页面的测试,需要关注以下几点: 1.1 登陆 目前H5与native各个客户端都做了互通,所以大

H5及H5页面是什么意思?如何制作H5页面?

H5是HTML5的简称.HTML5是HTML最新的修订版本,是一种超文本标记语言.H5有两大特点:首先,强化了 Web 网页的表现性能.其次,追加了本地数据库等 Web 应用的功能. H5页面就是利用html5制作出来的页面,尤其在微信中发展迅速,借由微信这个移动社交平台,正在走进更多人的视野,比如从引爆朋友圈的H5小游戏<围住神经猫>,到颠覆传统广告的大众点评H5专题页<我们之间只有一个字>,各种H5游戏和专题页纷纷崭露头角. 为活动推广运营而打造的H5页面是最常见的类型,形式多