H5App-美丽天气

本文介绍了使用HTML、CSS和HBuilder制作一个H5天气App的过程,包括预览效果、背景图片切换、沉浸式状态栏设置、数据请求及自定义$函数的使用,并提供了源码地址。

前段时间接触了mui,于是便做了一个H5天气app。

1.预览

已经用HBuilder打包成app在手机运行。
预览图
预览图

分别对应春夏秋冬。

2.背景的实现

背景的实现依靠了两个div,HTML如下:

<div class="weather-cover"></div>
<div class="weather-content"></div>

其中,cover是季节壁纸(准备了春夏秋冬四张),其CSS如下:

.weather-cover {
    width: 100vw;
    height: 100vh;

    background: center no-repeat;
    background-size: 100% 100%; 
    z-index: -10;
}

.weather-cover-spring {
    background-image: url(../img/autumn.jpg);
}

.weather-cover-summer {
    background-image: url(../img/summer.jpg);
}

.weather-cover-autumn {
    background-image: url(../img/autumn.jpg);
}

.weather-cover-winter {
    background-image: url(../img/winter.jpg);
}

从CSS代码就可以看出我是用哪个季节的背景就添加哪个className。那么怎么添加className呢?
很简单,根据月份来判断:

var currMonth = new Date().getMonth() + 1; //获取月份判断季节

if (2 <= currMonth && currMonth <= 4) {
    $('.weather-cover')[0].className += " " +' weather-cover-spring';
} else if (5 <= currMonth && currMonth <= 7) {
    $('.weather-cover')[0].className += " " +' weather-cover-summer';   
} else if (8 <= currMonth && currMonth <= 10) {
    $('.weather-cover')[0].className += " " +' weather-cover-autumn';
} else {
    $('.weather-cover')[0].className += " " +' weather-cover-winter';
}   

背景的问题解决了,但是为了所有天气信息的直观显示(字体为白色),我为weather-content这个div设置了背景做蒙层:

.weather-content {
    width: 100vw;
    height: 100vh;

    background: rgba(0, 0, 0, 0.3);

    position: fixed;
    left: 0;
    top: 0;
}

3.沉浸式状态栏的设置

我只打包了安卓平台,所以只说安卓版本。

打开应用的manifest.json文件,切换到代码视图,在plus -> distribute -> google 下添加ImmersedStatusbar节点并设置值为true。

注意调试的时候是无效的,打包成app后安装运行是有效果的。

4.数据请求

天气信息使用了NOWApi,简单举例下:

mui.ajax({
    type:   'get',
    async:  'false',

    url: '',
    dataType: 'json',
    jsonp: 'callback',
    jsonpCallback: 'data',

    success: function (data) {
        //
    }
});

5.关于$函数

$并不是使用了jQuery,而是我自定义的一个简单函数,便于获取dom节点用的。

//自定义$
function $(name) {
    var obj;

    if (name.match(/^#/)) {
       obj = document.getElementById(name.substr(1));
    } else if (name.match(/^\./)) {
        obj = document.getElementsByClassName(name.substr(1));
    } else {
        obj = document.getElementsByTagName(name);
    }

    return obj;
}

6.源码地址

源码我放在了我的GitHub上,希望喜欢的小伙伴点个star吧。^_^

### UniApp 条件编译实现 H5App-Plus 的区别方法 在 UniApp 开发中,条件编译是一种用于处理不同平台间代码差异的技术。通过条件编译,可以针对特定平台编写专属的逻辑、样式或结构,从而实现跨平台开发中的灵活性[^1]。 #### 一、条件编译的基本语法 条件编译使用 `#ifdef`、`#ifndef` 和 `#endif` 进行标记,分别表示“如果定义了某个平台”、“如果没有定义某个平台”以及“结束条件编译”。以下是基本语法示例: ```html <!-- #ifdef APP-PLUS --> <view>仅在 App-Plus 平台显示</view> <!-- #endif --> <!-- #ifdef H5 --> <view>仅在 H5 平台显示</view> <!-- #endif --> <!-- #ifndef APP-PLUS --> <view>除 App-Plus 平台外均显示</view> <!-- #endif --> ``` #### 二、H5App-Plus 的条件编译标识 在 UniApp 中,不同的平台有对应的标识符,用于区分目标运行环境。对于 H5App-Plus,其标识分别为: - `H5`:表示 H5 平台。 - `APP-PLUS`:表示 App-Plus 平台。 以下是一个具体的例子,展示如何在 HTML、JS 和 CSS 中分别针对 H5App-Plus 进行条件编译[^2]。 #### 三、HTML 中的条件编译 在 HTML 结构中,可以通过 `#ifdef` 和 `#endif` 区分 H5App-Plus 的内容: ```html <!-- #ifdef APP-PLUS --> <view class="app-plus-style">这是 App-Plus 独有的内容</view> <!-- #endif --> <!-- #ifdef H5 --> <view class="h5-style">这是 H5 独有的内容</view> <!-- #endif --> ``` #### 四、JavaScript 中的条件编译 在 JavaScript 中,可以使用注释的方式进行条件编译,具体如下: ```javascript /* #ifdef APP-PLUS */ console.log('当前运行在 App-Plus 环境'); /* #endif */ /* #ifdef H5 */ console.log('当前运行在 H5 环境'); /* #endif */ ``` #### 五、CSS 中的条件编译 在样式文件中,也可以通过条件编译来为不同平台设置专属样式: ```css /* #ifdef APP-PLUS */ .app-plus-style { background-color: blue; } /* #endif */ /* #ifdef H5 */ .h5-style { background-color: green; } /* #endif */ ``` #### 六、实际应用场景 以下是一个综合示例,展示如何在下载文件功能中针对 H5App-Plus 进行条件编译[^5]: ```javascript downPdf() { uni.downloadFile({ url: 'https://example.com/file.pdf', success: (res) => { if (res.statusCode === 200) { console.log('下载成功', res.tempFilePath); /* #ifdef H5 */ let newUrl = res.tempFilePath; // 在 H5 环境下直接使用临时路径 /* #endif */ /* #ifdef APP-PLUS */ let newUrl = plus.io.convertLocalFileSystemURL(res.tempFilePath); // 在 App-Plus 环境下转换路径 /* #endif */ // 跳转到预览页面 uni.navigateTo({ url: "/pages/preview/preview?url=" + encodeURIComponent(newUrl) }); } } }); } ``` #### 七、注意事项 1. 条件编译仅在构建时生效,运行时无法动态切换平台逻辑[^4]。 2. 避免在同一个条件块中同时使用 `#ifdef` 和 `#ifndef`,以防止逻辑冲突。 3. 在复杂项目中,建议将平台特定的代码封装为独立模块,以提高代码可维护性。 ```python def platform_specific_logic(platform): if platform == "APP-PLUS": return "App-Plus 逻辑" elif platform == "H5": return "H5 逻辑" else: return "默认逻辑" ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值