鸿蒙JS开发14 自定义构建购物计算组件&表单组件

开发
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[382445]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

1.前言:

在第九篇文章购物车做好后,还忘记了一个至关重要的计算组件.在鸿蒙的组件中并没有提供这样一个计算功能的组件,因此我们今天来自定义一个,这个组件和之前做的购物车的小项目放在一起.直男缺乏美感,我们就模仿别人的就行: 

 2.组件介绍:

这里(以后也要用到)要用到一个标签:<input> .这个标签会与表单用在一起,比如搜索框,登录页面等都会用到<input>.input>.input>标签规定用户可输入数据的输入字段.type属性规定 input元素的类型, 根据不同的 type 属性,输入字段有多种形态.输入字段可以是文本字段、复选框、密码字段、单选按钮、按钮等等,今天所用到的是文本字段、复选框字段和密码字段.

3.js业务逻辑层:

点击事件onclick后,执行+的操作可以没有上限,但执行-操作在实际应用(例如购物车商品的数量)当中一般是减1后就停止.这里我们做一个提示框,用来表示已经减到最小。

  1. import prompt from '@system.prompt'
  2. export default { 
  3.     data: { 
  4.         title: 'World'
  5.         num:1, 
  6.     }, 
  7.     addnum(){ 
  8.         ++this.num; 
  9.     }, 
  10.     reducenum(){ 
  11.         if(this.num>1){ 
  12.             --this.num; 
  13.         } 
  14.         else
  15.             prompt.showToast({ 
  16.                 message:"对不起,商品至少为一件"
  17.                 duration:5000, 
  18.             }) 
  19.         } 
  20.     } 

 4.视图层:

这里type的value可以是接收text,同样也可以是number 读者可以自行尝试。

  1. <div class="container"
  2.   <div class="countview"
  3.       <text class="tv1" onclick="reducenum">-</text> 
  4.           <input class="inputview" type="text" value="{{num}}"></input> 
  5.       <text class="tv2" onclick="addnum">+</text> 
  6.   </div> 
  7. </div> 

 5.css属性设置:

  1. .container { 
  2.     width: 100%; 
  3.     height:1200px; 
  4.     display: flex; 
  5.     justify-content: center; 
  6.     align-items: center; 
  7. .countview{ 
  8.     width: 300px; 
  9.     height: 120px; 
  10.     /**border: 3px solid red;**/ 
  11.     display: flex; 
  12.     justify-content: center; 
  13.     align-items: center; 
  14.    border-radius: 100px; 
  15. .tv1{ 
  16.     width: 70px; 
  17.     height: 70px; 
  18.     font-size: 60px; 
  19.     font-weight: bold; 
  20.     text-align: center; 
  21.     border:3px solid darkgray; 
  22.     border-radius: 35px; 
  23.     background-color: white; 
  24.     color:darkgrey ; 
  25. .tv2{ 
  26.     width: 70px; 
  27.     height: 70px; 
  28.     font-size: 50px; 
  29.     font-weight: bold; 
  30.     text-align: center; 
  31.     border:4px solid #FFB964; 
  32.     border-radius: 35px; 
  33.     background-color: #FFB964; 
  34.     color: white; 
  35. .inputview{ 
  36.     width: 200px; 
  37.     height: 100%; 
  38.     background-color: white; 
  39.     font-weight: bold; 
  40.     font-size: 50px; 
  41.     margin-left: 30px; 

 6.效果呈现:



这里用到的 input 的type属性的文本字段和密码字段.利用这两个可以制作一个登录页面。

大家都知道在点击输入框时光标会闪烁,也即是需要获取焦点.而获取焦点的事件是 onfocus.取消焦点事件为onblur. 当我们点击input的父容器时就获得焦点,也就可以输入字段,为了更直观的看到获取焦点成功,我设置了图标的颜色,未获取时图标为灰色,获取成功后为红色.如下图:


placeholder是用户名密码框未输入内容时,默认显示的灰色文字。当未输入字段时显示,当在输入字段获得焦点时消失。




js业务逻辑层:

  1. export default { 
  2.     data: { 
  3.         title: 'World'
  4.         flag:false
  5.     }, 
  6.     click(){ 
  7.         this.flag=true
  8.     }, 
  9.     click1(){ 
  10.         this.flag=false
  11.     } 

 视图层:

  1. <div class="container"
  2.     <div class="one" onblur="click1" onfocus="click"
  3.         <image class="img1"src="{{flag?'common/qqs.png':'common/qqu.png'}}"></image> 
  4.         <input style="background-color:rgb(242, 243, 247);" class="input1" type="text" placeholder="QQ号/手机号/邮箱"> </input> 
  5.     </div> 
  6.     <div onblur="click1" class="one" onfocus="click"
  7.         <image class="img1"src="{{flag?'common/mimas.png':'common/mimau.png'}}"></image> 
  8.         <input  style="background-color:rgb(242, 243, 247);" class="input1" type="password" placeholder="输入密码"> </input> 
  9.     </div> 
  10.     <div class="but"
  11.         <button class="bottom">登录</button> 
  12.     </div> 
  13. </div> 

 css属性设置:

  1. .container { 
  2.  
  3.     width: 100%; 
  4.     height: 1200px; 
  5.     display: flex; 
  6.     justify-content: center; 
  7.     align-items: center; 
  8.     flex-direction: column
  9. .one{ 
  10.     width: 80%; 
  11.     height: 150px; 
  12.     background-color: rgb(242, 243, 247); 
  13.     border-radius: 100px; 
  14.     margin: 20px; 
  15.     display: flex; 
  16.     align-items: center; 
  17. .img1{width: 80px; 
  18.     height: 80px; 
  19. .input1{ 
  20.     height: 100%; 
  21.     font-size: 50px; 
  22.     focus-color: rgb(109, 131, 170); 
  23. .bottom{ 
  24.     width: 280px; 
  25.     height: 280px; 
  26.     border-radius: 140px; 
  27.     background-color: rgb(192, 192, 190); 
  28.     margin: 60px; 
  29.     font-size: 100px; 
  30.  
  31. .but{ 
  32.     display: flex; 
  33.     justify-content: center; 
  34.  

欢迎读者朋友订阅我的专栏:[HarmonyOS开发从0到1]

https://harmonyos.51cto.com/column/35

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2022-10-25 15:12:24

自定义组件鸿蒙

2022-10-26 15:54:46

canvas组件鸿蒙

2021-11-01 10:21:36

鸿蒙HarmonyOS应用

2022-07-06 20:24:08

ArkUI计时组件

2009-06-24 15:13:36

自定义JSF组件

2021-09-15 10:19:15

鸿蒙HarmonyOS应用

2021-04-23 16:08:08

鸿蒙HarmonyOS应用

2022-02-21 15:16:30

HarmonyOS鸿蒙操作系统

2021-01-11 11:36:23

鸿蒙HarmonyOSApp开发

2022-02-16 16:09:12

鸿蒙游戏操作系统

2022-02-16 15:25:31

JS代码Canvas鸿蒙

2022-04-24 15:17:56

鸿蒙操作系统

2022-05-20 14:34:20

list组件鸿蒙操作系统

2023-02-20 15:20:43

启动页组件鸿蒙

2021-11-24 10:02:53

鸿蒙HarmonyOS应用

2021-11-22 10:00:33

鸿蒙HarmonyOS应用

2021-06-17 14:56:00

鸿蒙HarmonyOS应用

2022-12-07 08:56:27

SpringMVC核心组件

2022-06-30 14:02:07

鸿蒙开发消息弹窗组件

2023-01-03 07:40:27

自定义滑块组件
点赞
收藏

51CTO技术栈公众号