成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS - 自定義組件之Slider滑塊

系統(tǒng) OpenHarmony
本文主要結合HarmonyOS官網(wǎng)上的相關組件以及通用API,實現(xiàn)一個Slider滑塊組件。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

??https://ost.51cto.com??

前言

最近在學習HarmonyOS開發(fā)相關知識,在項目開發(fā)過程中有用到slider滑塊組件,本文主要結合HarmonyOS官網(wǎng)上的相關組件以及通用API,實現(xiàn)一個slider滑塊組件。

效果演示

#夏日挑戰(zhàn)賽# HarmonyOS - 自定義組件之slider滑塊-開源基礎軟件社區(qū)

實現(xiàn)原理

1、觸發(fā)條件

基于HarmonyOS通用事件touchstart和touchmove,通過手指剛觸摸屏幕時觸發(fā)、手指觸摸屏幕后移動時觸發(fā)事件。

2、實現(xiàn)slider滑塊效果

通過touches觸摸事件時的屬性集合,返回屏幕觸摸點的信息數(shù)組,拿到localX距離被觸摸組件左上角橫向距離,動態(tài)計算出子元素的寬度來實現(xiàn)slider滑塊效果。

3、實現(xiàn)百分比顯示

通過HarmonyOS通用方法getBoundingClientRect()獲取元素自身的寬度;通過滑動的距離除去元素自身的寬度,來實現(xiàn)滑塊移動的百分比。

使用到的官方API

通用方法

getBoundingClientRect()

獲取元素的大小及其相對于窗口的位置。

屬性

類型

描述

width

number

該元素的寬度。

height

number

該元素的高度。

left

number

該元素左邊界距離窗口的偏移。

top

number

該元素上邊界距離窗口的偏移。

通用事件

名稱

參數(shù)

描述

是否支持冒泡

touchstart

??TouchEvent??

手指剛觸摸屏幕時觸發(fā)該事件。

是5+

touchmove

??TouchEvent??

手指觸摸屏幕后移動時觸發(fā)該事件。

是5+

屬性

類型

說明

touches

Array<TouchInfo>

觸摸事件時的屬性集合,包含屏幕觸摸點的信息數(shù)組。

屬性

類型

說明

globalX

number

距離屏幕左上角(不包括狀態(tài)欄)橫向距離。屏幕的左上角為原點。

globalY

number

距離屏幕左上角(不包括狀態(tài)欄)縱向距離。屏幕的左上角為原點。

localX

number

距離被觸摸組件左上角橫向距離。組件的左上角為原點。

localY

number

距離被觸摸組件左上角縱向距離。組件的左上角為原點。

實現(xiàn)過程

hml部分:

<div class="slider-wrapper">
<div class="progressBox">
<text>
<span>{{progress}}%</span>
</text>
</div>
<div class="content">
<div id="slider" @touchstart="boxChoose" @touchmove="boxChoose" style="width: 300px;">
<div class="slider-main" style="width: {{ width }}"></div>
</div>
<div class="dot" style ="left : {{dotLeft}}"></div>
</div>
<div class="progress" >
<text for="{{ (index,item) in stepArr }}">
{{item}}
</text>
</div>

</div>

css部分:

.slider-wrapper {
width: 100%;
display: flex;
align-items: center;
flex-direction: column;
background-color: bisque;
}
.progressBox{
margin-top:50px ;
display: flex;
justify-content: center;
align-items: center;
}
.content{
width: 300px;
display: flex;
align-items: center;
flex-direction: column;
position: relative;
margin-top: 50px;
}
#slider {
width: 300px;
height: 15px;
background-color: pink;
display: flex;
justify-content: center;
}
.slider-main {
background-color: aqua;
width: 0;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
.dot {
border-radius: 50px;
width: 25px;
height: 25px;
background-color: #fff;
border: 1px solid #409eff;
position: absolute;
top: -5px;
}
.progress{
width: 300px;
display: flex;
justify-content: space-between;
align-items: flex-end;
font-size: 20px;
}

js部分:通過動態(tài)改變子元素width的寬度來實現(xiàn)slider滑塊效果;給小圓dot相對于它父元素設置為絕對定位,通過動態(tài)改變left的值使圓塊移動,把子元素width的寬度賦值給變量dotLeft,就可以實現(xiàn)小圓跟隨滑塊一起移動的效果。

export default {
data: {
progress:0,//百分比
width: 0,
step1: 1,//步長
stepArr:[0,20,40,60,80,100],
dotLeft:-10
},
boxChoose(e) {
let box = this.$element('slider')
let width = e.touches[0].localX // 獲取點擊時距離容器左邊位置
this.dotLeft = width
let elementWidth = box.getBoundingClientRect().width -10 //元素的寬度 - 小圓的偏移量
// 小圓的偏移量臨界值
if ( this.dotLeft >= elementWidth ) {
this.dotLeft = elementWidth
}
if ( this.dotLeft <= -10 ) {
this.dotLeft = -10
}
let compare = elementWidth / (100 / this.step1) // 根據(jù)步長計算每一步寬度
this.width = Math.ceil(width / compare) * compare
this.progress = Math.round(this.width / elementWidth *100)
//限制臨界值
if(this.progress >= 100){
this.progress = 100
};
if(this.progress <= 0){
this.progress = 0
}
},
}

總結

這篇文章是我對學習鴻蒙動畫API的一個練習,也算是一個比較常用的組件,后續(xù)部分功能還需完善,比如在樣式、功能方面等等,希望可以和大家共同學習鴻蒙更多的知識,一起進步。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區(qū)??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關推薦

2023-01-03 07:40:27

自定義滑塊組件

2022-06-20 15:43:45

switch開關鴻蒙

2022-07-12 16:56:48

自定義組件鴻蒙

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2022-06-30 14:02:07

鴻蒙開發(fā)消息彈窗組件

2022-05-20 14:34:20

list組件鴻蒙操作系統(tǒng)

2023-02-20 15:20:43

啟動頁組件鴻蒙

2021-12-24 15:46:23

鴻蒙HarmonyOS應用

2021-11-24 10:02:53

鴻蒙HarmonyOS應用

2022-04-24 15:17:56

鴻蒙操作系統(tǒng)

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統(tǒng)

2021-12-21 15:22:22

鴻蒙HarmonyOS應用

2021-12-30 16:10:52

鴻蒙HarmonyOS應用

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2022-06-23 07:23:34

自定義組件計時器

2022-05-23 10:53:54

canvas柱狀圖鴻蒙

2021-01-11 11:36:23

鴻蒙HarmonyOSApp開發(fā)

2009-06-24 15:13:36

自定義JSF組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看电影av | 91色视频在线 | 国产激情精品一区二区三区 | 一区二区三区欧美在线观看 | 三级av网址| 日韩视频一区二区在线 | 蜜桃av鲁一鲁一鲁一鲁 | 日韩视频91| 国产精品亚洲成在人线 | 久草成人| 四虎影音 | 欧美激情在线播放 | 91大神新作在线观看 | 国产在线观看av | 免费毛片网 | 国产精品揄拍一区二区久久国内亚洲精 | 一区二区在线 | 亚洲国产一区二区三区, | 欧美日韩一 | 久久国产精品一区 | 国产69精品久久99不卡免费版 | 日本一卡精品视频免费 | 久久91精品久久久久久9鸭 | 亚洲人人 | 欧美区在线 | 成人免费观看男女羞羞视频 | 欧美黑人又粗大 | 色综合久久天天综合网 | 日韩免费高清视频 | 先锋资源在线 | 欧美一区二区三区日韩 | 中文字幕一区二区三区日韩精品 | 午夜丰满寂寞少妇精品 | 九九热免费在线观看 | 国产一区二区三区网站 | 中国美女一级黄色片 | 国产人成在线观看 | 亚洲欧美在线免费观看 | 日韩中文一区二区三区 | 国产福利视频网站 | 99亚洲 |