Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >鸿蒙HarmonyOS官方JavaScript demo解析

鸿蒙HarmonyOS官方JavaScript demo解析

作者头像
肉眼品世界
发布于 2021-03-09 06:57:36
发布于 2021-03-09 06:57:36
1.2K00
代码可运行
举报
文章被收录于专栏:肉眼品世界肉眼品世界
运行总次数:0
代码可运行

今天小编就带大家来学习鸿蒙JavaScript demo,不需要JavaAndroid基础,相信大家都能跟着我一起把demo看懂看透。首先还是下载安装 DevEco Studio 2.0,然后New Project,选择一个较为复杂的Refresh Feature Ability(JS)模板。

JS模板

工程建好后,先看看目录结构,全部代码只有两个Java文件(MainAbility.java,MyApplication.java),这两个文件里面没什么实质内容,只是一个程序入口点而已,没有任何界面和业务逻辑。再看看与java目录平级的js目录,里面多了很多js文件,我们只用在这里去继续写代码即可。

目录结构

首先看看app.js代码,它是JS程序的入口点,从Java入口点调到这里来,然后由这里再去调用更多index.js文件。从这段js代码来看,有没有很熟悉的感觉?跟谁很像?对!跟微信小程序很像。微信小程序也不是独创的,一些常用前端框架都类似,采用了node.js的编码风格,采用了Vue.js的MVC架构。微信小程序,快应用,React Native等都是类似的语法和机制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
    onCreate() {
        console.info('AceApplication onCreate');
    },
    onDestroy() {
        console.info('AceApplication onDestroy');
    }
};

然后看看default/index.js,data:{}里面定义了页面里要用到的变量,onInit()是初始化函数。refresh()函数是进行页面刷新,里面调用了showResult()进行了setTimeout()延时器来requestData(),目的是让定时去刷新messageNum值。这个文件里的代码学过前端开发的网友们应该都能看懂,就不一一去解释了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const injectRef = Object.getPrototypeOf(global) || global;

injectRef.regeneratorRuntime = require('@babel/runtime/regenerator');

/**
 * data request duration (ms)
 */
const TASK_DURATION = 2000;

/**
 * refresh result duration (ms)
 */
const REFRESH_RESULT_DURATION = 500;

/**
 * refresh succeed background  color
 */
const REFRESH_SUCCEED_COLOR = '#0A59F7';

/**
 * refresh failed background  color
 */
const REFRESH_FAILED_COLOR = '#E84026';

export default {
    data: {
        isRefreshing: null,
        refreshResultIsVisibility: '',
        refreshResultColor: '',
        refreshResult: '',
        hideResult: ''
    },
    onInit() {
        this.refreshResultIsVisibility = 'hidden';
    },

/*
    * which simulates a long running  data request task, developer customization
    */
    requestData(delay) {
        return new Promise((resolve) => {
            setTimeout(() => {
                this.isRefreshing = false;
                // Simulate refresh results
                const messageNum = Math.round(Math.random());
                resolve(messageNum);
            }, delay);
        });
    },
    async showResult() {
        const refreshSucceed = this.$t('strings.refresh_bar.refreshSucceed');
        const refreshFailed = this.$t('strings.refresh_bar.refreshFailed');
        var that = this;

        try {
            const messageNum = await this.requestData(TASK_DURATION);

            if (messageNum != 0) {
                // Set the number of current refresh data
                this.refreshResult = refreshSucceed.replace('{count}', messageNum);
                this.refreshResultColor = REFRESH_SUCCEED_COLOR;
            } else {
                this.refreshResult = refreshFailed;
                this.refreshResultColor = REFRESH_FAILED_COLOR;
            }

            this.refreshResultIsVisibility = 'visible';
            that.hideResult = '';
            setTimeout(function () {
                that.hideResult = 'hide-result';
            }, REFRESH_RESULT_DURATION);
        } catch (e) {
            console.error('requestData caught exception' + e);
        }
    },
    refresh: function (refreshingValue) {
        this.showResult();
        this.isRefreshing = refreshingValue.refreshing;
    }
};

我们再看看与index.js对应的index.html,用一个div来显示标题,用一个stack来显示三个图片,布局比较好理解,关键点在这里,例如 onrefresh="refresh",这是绑定事件响应函数,表示刷新事件发生时,会调用对应js文件里的 refresh()函数。我们在介绍index.js代码时知道有个refresh()函数,但没有调用的地方,实际上就是在html这里调用。而 refreshing="{{this.isRefreshing}}" 需要特别说明一下,没学过Vue.js等前端框架的网友可能很难看懂,这里其实就是MVC思想的精髓,{{xxx}} 双大括号里面可以直接引用js文件里的变量,当js变量值被改变时,页面能够自动刷新,而无需重刷整个页面。而双括号里带t的,类似这个main-text="{{ $t('strings.content_bar.mainText') }},是表示返回值以字符串的形式显示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<element name='image_description' src='../../common/component/image_description.hml'></element>
<div class="container">
    <div class="app-bar">
        <text class="title">{{ $t('strings.app_bar.title') }}
        </text>
    </div>
    <stack>
        <refresh lasttime="true" onrefresh="refresh" refreshing="{{this.isRefreshing}}" type="pulldown" friction="42">
            <div class="content-show">
                <image_description image-description-position="flex-start" image-path="/common/image.png"
                        main-text="{{ $t('strings.content_bar.mainText') }}"
                        auxiliary-text="{{ $t('strings.content_bar.auxiliaryText') }}"></image_description>
                <image_description image-description-position="center" image-path="/common/image.png"
                        main-text="{{ $t('strings.content_bar.mainText') }}"
                        auxiliary-text="{{ $t('strings.content_bar.auxiliaryText') }}"></image_description>
                <image_description image-description-position="flex-end" image-path="/common/image.png"
                        main-text="{{ $t('strings.content_bar.mainText') }}"
                        auxiliary-text="{{ $t('strings.content_bar.auxiliaryText') }}"></image_description>
            </div>
        </refresh>
        <div class="refresh-result-outer {{hideResult}}" style="visibility: {{refreshResultIsVisibility}}">
            <div class="refresh-result-inner" style="background-color: {{refreshResultColor}}">
                <text class="result"> {{refreshResult}}
                </text>
            </div>
        </div>
    </stack>
</div>

index.css文件自不必多说,就是H5里的样式表文件,这里摘取一部分代码,完全遵守H5的样式表规范。而js要引用的界面字符串存放在 i18n目录下,en-US.json表示英文,zh-CN.json表示中文,它可以让app在手机系统语言设置发生变化时,自动变更界面语言。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.container {
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
}

/*
 * app bar
 */
.app-bar {
    height: 56px;
    width: 100%;
    margin-left: 24px;
    margin-right: 24px;
    flex-direction: column;
    justify-content: center;
    background-color: #f2ffffff;
}

JS版本的代码是不是很容易理解呢?小编曾说过鸿蒙支持JS,等于开启了前端开发者的春天,因为以前前端开发者只能在web或h5网站,如今可以直接做app了。最后我们运行一下这个JS版的app吧,运行之前需要到File->Settings->HarmonyOS SDK里勾选js,安装node.js依赖包,安装完后就可以正常运行啦。

安装js sdk

运行后,下拉图片列表触发刷新动作,可以看到界面上显示了刷新次数和刷新结果,至此我第一个鸿蒙js demo就讲解完毕了。如果光看文章还是觉得难懂,那就赶紧动手练一练吧

来源:

https://www.toutiao.com/i6927242763096293899/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 肉眼品世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue中下拉刷新和上拉加载更多
前言 下拉刷新 ZDropDownRefresh.vue <template lang="html"> <div class="refresh-moudle" @touchstart="touchStart($event)" @touchmove="touchMove($event)" @touchend="touchEnd($event)" ref="myrefresh" :style="{ transform: 'translate3d(0,' + t
码客说
2021/08/31
1.2K0
APICloud AVM框架列表组件list-view的使用、flex布局教程
avm.js 是APICloud 推出的多端开发框架。使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染效果统一;全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 一致。
APICloud官方
2022/02/09
6590
鸿蒙NEXT版仿抖音快手App的下拉刷新组件
上一节我们通过网络请求库实现了简单的HTTP接口调用,那么除了在首次加载App界面时的接口调用,用户还会通过下拉刷新动作实时获取最新的接口内容。鸿蒙系统提供了专门的下拉刷新组件Refresh,方便开发者处理下拉刷新事件。
aqi00
2024/12/09
1690
鸿蒙NEXT版仿抖音快手App的下拉刷新组件
控制页面的滚动:自定义下拉到刷新和溢出效果
通过阅读本文,你可以通过css 中overcroll-behavior属性值的设置,处理浏览器溢出滚动,以及禁用移动设备上刷新,下拉滚动时的发光和橡皮圈回弹效果,当然也可以看到css中 Houndini(胡迪宁),也就是css中也可以写变量等知识,如果文有误导的地方,欢迎路过的老师拍砖指正
itclanCoder
2020/10/28
3.8K0
控制页面的滚动:自定义下拉到刷新和溢出效果
老司机读书笔记——Weex学习笔记
Weex整体上与Vue语法大概一直,基本用法由阿里进行二次封装。以下主要介绍Weex的一些内置组件。
老司机Wicky
2018/08/22
1.7K0
老司机读书笔记——Weex学习笔记
测试鸿蒙
<div class="container"> <div class="title"> <text class="name">Food</text> <text class="sub-titLe">Choose What You Like</text> </div> <div class="display-styLe"> <!-- 展示区--> <swiper id="swiperImage" class= "swiper-style"> <image src
红目香薰
2022/11/29
2970
一个简单的ReactNative demo
本人非前端,请轻喷 ReactNative版本:0.31 github:https://github.com/X-FAN/reactnativelearn
夏洛克的猫
2018/10/18
2.1K0
一个简单的ReactNative demo
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、列表渲染、条件渲染和逻辑控制等高级能力。
枫叶丹
2025/01/27
1460
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
原生鸿蒙Next版API12聊天实例|鸿蒙ArkTS实战聊天朋友圈
这段时间一直学习华为自主研发的鸿蒙OS Next全场景操作系统。花了一个月捣鼓了一款HarmonyOS聊天App项目。
andy2018
2024/11/19
3300
原生鸿蒙Next版API12聊天实例|鸿蒙ArkTS实战聊天朋友圈
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
在基础篇中,我们学习了如何使用HarmonyOS NEXT的SideBarContainer组件创建新闻阅读应用的基本侧边栏布局。本篇教程将深入探讨如何为新闻阅读应用添加更多交互功能和状态管理,提升用户体验。
全栈若城
2025/06/12
940
124.[HarmonyOS NEXT 实战案例一:SideBarContainer] 侧边栏容器实战:新闻阅读应用侧边栏布局 进阶篇
基础篇章:关于 React Native 之 RefreshControl 组件的讲解
(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) 我们已经讲完了 ScrollView 和 ListView ,自然而然我们就应该讲的组件就是下拉刷新的喽,因为它们几个是兄弟,常常一块出现,就跟打麻将似的,四缺一不能打,那它们三就是斗地主,三缺一不能玩。今天讲的这个组件就是它们的兄弟:RefreshControl 。 介绍 我的母亲官网是这么介绍我的,说:我是大家在使用我的兄弟ScrollView或ListView添加拉刷新功能用的,我们几个
非著名程序员
2018/02/09
1.7K0
基础篇章:关于 React Native 之 RefreshControl 组件的讲解
怎么用 JavaScript 构建自定义的 HTML5 视频播放器
在网页中观看和分享视频内容是一个很常见的功能,多年来,视频嵌入网页的方式发生了变化。现在,我们在现代浏览器中使用 <video> 标签就可以添加视频文件到网页上,该标签支持多个视频格式。
Jimmy_is_jimmy
2023/03/09
11.8K0
怎么用 JavaScript 构建自定义的 HTML5 视频播放器
React Native项目实战之搭建美团个人中心界面
在很多app应用型APP中,个人中心往往会单独出一个模块,而对于刚入门React Native的朋友来说,怎么去实现一些静态的页面,并且怎么着手实现,怎么分层,怎么去实现这个架构,我想是很基础的(ps
xiangzhihong
2018/02/06
2.5K0
React Native项目实战之搭建美团个人中心界面
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
Tabs默认展示索引为index的标签及内容。通过设置vertical属性使组件纵向展示。
枫叶丹
2025/02/18
900
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
HarmonyOS 开发实践——基于List和Scroller由简单到复杂列表布局开发实践
运用List组件作为整个首页长列表的容器,通过ListItem对不同模块进行定制。
小帅聊鸿蒙
2024/11/04
3690
HarmonyOS 开发实践——基于List和Scroller由简单到复杂列表布局开发实践
使用纯 html + javascript 开发一个本地音乐播放器
本文介绍不使用任何前端开发框架,仅凭借原生的 html + JavaScript,实现一个简单的本地音乐播放器的实现步骤。
编程小妖女
2025/06/08
2470
使用纯 html + javascript 开发一个本地音乐播放器
uni-app 结合云函数开发小程序博客(三):接入云函数,实现完善的列表刷新机制
因为项目做的是博客demo, 首页进来想给人直观的就能看到文章,看到分类。所以想的一个是可以左右滑动,切换分类,一个是页面以列表形式,直接 list 渲染。类似掘金的样式:
一只图雀
2020/05/20
4.4K0
HarmonyOS开发实例—蜜蜂AI助手
自华为宣布HarmonyOS NEXT全面启动,近期新浪、B站、小红书、支付宝等各领域头部企业纷纷启动鸿蒙原生应用开发。据媒体统计,如今Top20的应用里,已经有近一半开始了鸿蒙原生应用开发。虽然目前HarmonyOS NEXT还未面向个人开发者开放,但我们可以体验并使用最新的API9和开发工具,尝试开发元服务,这个鸿蒙新的应用形态。体验未来在HarmonyOS NEXT上实现的应用开发。但需要注意的是, 基于API9开发的应用或元服务是不可以适配HarmonyOS NEXT版本的,大家也可以期待一下明年推出的适配HarmonyOS NEXT新版本。
徐建国
2023/12/15
6330
HarmonyOS开发实例—蜜蜂AI助手
「原生案例」如何在JavaScript中实现实时搜索功能
无论您是经验丰富的开发人员还是刚开始编码之旅的新手,本文旨在为您提供一般编码知识和工具,以便将实时搜索功能融入到您的项目中。通过本指南的学习,您将对相关概念和技术有扎实的理解,从而能够创建响应式和交互式的搜索功能,实现用户输入时动态更新的效果。
前端达人
2023/10/22
1.7K0
「原生案例」如何在JavaScript中实现实时搜索功能
GridView基于pulltorefresh实现下拉刷新 上拉加载更多功能
这个源码里面 我把  PullToRefreshExpandableListView 和 PullToRefreshListView  也都放进来了,一样的逻辑。希望对大家有用。
再见孙悟空_
2023/02/10
1K0
推荐阅读
相关推荐
Vue中下拉刷新和上拉加载更多
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验