微信小程序滑動標(biāo)尺/刻度尺

項目需要欢伏,開發(fā)了一個滑動標(biāo)尺的組件逾礁,炒雞好用的哦~~~

本來是想用touchmove,touchend來通過translate位移實(shí)現(xiàn)效果递惋,事實(shí)證明霹购,這種方式也是可行的佑惠。但是別忘了小程序中還有一個好用的組件 scroll-view ,利用屬性bindscroll 輕輕松松獲取滾動信息齐疙。下面直接上代碼吧膜楷。

組件

組建目錄:


組件目錄.png
<!-- 標(biāo)尺 -->
<view id="ruler" class="{{type}}">
    <view class="cur_val">
        <text>{{curVal}}</text>
        <text class="unit">{{unit}}</text>
    </view>

    <view class="box">
        <text class="cursor"></text>
        <scroll-view scroll-x="true" scroll-left="{{salNum}}" scroll-with-animation='true' catchscroll="bindscroll" throttle="{{false}}">
            <view class="scroller" style="width:{{scaleWidth}};" >
                <text wx:for="{{count}}" wx:key="{{index}}" class="{{((item+min)*step) % bigStep == 0 ? 'big':((item+min)*step) % middleStep == 0 ? 'middle' : ''}}">
                    <text wx:if="{{(item+min)%10==0}}" class="scale_txt">{{item + min}}</text>

                </text>
            </view>
        </scroll-view>
    </view>
</view>

如上,scroll-view為滑動區(qū)域贞奋,利用catchscroll監(jiān)聽滾動事件獲取移動距離e.detail.scrollLeft把将;bigStep和middleStep是控制刻度尺樣式 10個小格最長,5個小格中等長忆矛。

properties: {
        min:{
            type: Number,
            value: 0
        },
        max:{
            type: Number,
            value: 100
        },
        def:{
            type: Number,
            value: 30
        },
        unit:{
            type: String,
            value: ''
        }
    },

    /**
    * 組件的初始數(shù)據(jù)
    */
    data: {
        curVal: 0,//當(dāng)前值
        step: 1,//步長 每格代表的值
        middleStep: 5,
        bigStep: 10,
        cellW: 10
    },
    created: function(){
        //組件實(shí)例被創(chuàng)建察蹲,此時不能使用setData

    },
    ready: function(){
        //初始化
        var _this = this;
        var _this_ = this.data;
        //一共有多少格
        var count = Math.ceil((_this_.max - _this_.min) / _this_.step) + 1;
        _this.setData({
            count: count,
            scaleWidth: (count * _this_.cellW) + 'px', //尺子總長度
            salNum: (_this_.def - _this_.min) / _this_.step *  _this_.cellW
        });

        //初始值
        _this.setVal(_this_.salNum);
    },
 methods:{
        bindscroll: function(e){
            // 移動距離
            let left = e.detail.scrollLeft;

            this.setVal(left);

        },
        setVal: function(left){

            let curVal = Math.round(  left / this.data.cellW / this.data.step ) + this.data.min;
            this.setData({
                curVal: curVal > this.data.max ? this.data.max : (curVal < this.data.min ? this.data.min : curVal),
                // salNum: left
            });

            this.triggerEvent('slide',{"curVal":this.data.curVal});
        },
        setDefVal: function(){
            //初始值
            var _this = this;
            this.setData({
                salNum: (_this.data.curVal - this.data.min) * this.data.cellW * this.data.step
            });
        }
    }

如上,data中cellW為小格子寬度(wxss里面寬度+邊框的值)催训;methods中通過 this.triggerEvent('slide',{"curVal":this.data.curVal}) 觸發(fā)slide自定義事件把值傳遞洽议。

.scroller>text{
    font-size: 20rpx;
    color: #333;
    display: inline-block;
    width: 9px;                      /*刻度尺寬度用px*/
    border-left: 1px solid #333;
    border-bottom: 1px solid #333;
    height: 20rpx;
    vertical-align: bottom;
    position: relative;
}

wxss里面主要強(qiáng)調(diào)一點(diǎn),刻度尺的寬度需要用px來設(shè)置漫拭,因?yàn)椴煌謾C(jī)分辨率不一樣亚兄,如果用rpx的話,再換算成px移動距離精度不準(zhǔn)確采驻。
組件大致構(gòu)成就是這了审胚,那怎么用呢?看下面

具體使用

index.wxml : 傳入最大值max礼旅,最小值min膳叨,默認(rèn)值def

<view>
    <slide id="rule" min="0" max="100" def="30" bind:slide="slideTrigger"></slide>
</view>

<view>當(dāng)前滑動值:{{val}}</view>

index.json : 根據(jù)你自己的目錄引入

{
    "navigationStyle":"default",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "刻度尺",
    "navigationBarTextStyle": "black",
    "disableScroll": true,
    "usingComponents": {
         "slide": "../components/slide/slide"
    }
}

index.js : 方法slideTrigger返回值為當(dāng)前選擇的值

Page({
    data: {

    },
    onLoad: function (options) {

    },
    slideTrigger: function(e){
        var that = this;
        that.setData({
            val: e.detail.curVal
        });
        console.log('當(dāng)前選擇的值',e.detail.curVal);
    }
})

好了,最后呈現(xiàn)出來的效果就是這樣紙啦~


演示.gif

這是第一次寫文章痘系,如果有不明白的隨時問我菲嘴,我們一起進(jìn)步學(xué)習(xí)!
具體的詳細(xì)代碼在這里哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市龄坪,隨后出現(xiàn)的幾起案子昭雌,更是在濱河造成了極大的恐慌,老刑警劉巖健田,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烛卧,死亡現(xiàn)場離奇詭異,居然都是意外死亡妓局,警方通過查閱死者的電腦和手機(jī)唱星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跟磨,“玉大人间聊,你說我怎么就攤上這事〉志校” “怎么了哎榴?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僵蛛。 經(jīng)常有香客問我尚蝌,道長,這世上最難降的妖魔是什么充尉? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任飘言,我火速辦了婚禮,結(jié)果婚禮上驼侠,老公的妹妹穿的比我還像新娘姿鸿。我一直安慰自己,他們只是感情好倒源,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布苛预。 她就那樣靜靜地躺著,像睡著了一般笋熬。 火紅的嫁衣襯著肌膚如雪热某。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天胳螟,我揣著相機(jī)與錄音昔馋,去河邊找鬼。 笑死糖耸,一個胖子當(dāng)著我的面吹牛秘遏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔬捷,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼垄提,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了周拐?” 一聲冷哼從身側(cè)響起铡俐,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妥粟,沒想到半個月后审丘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勾给,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年滩报,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片播急。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡脓钾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桩警,到底是詐尸還是另有隱情可训,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布捶枢,位于F島的核電站握截,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烂叔。R本人自食惡果不足惜谨胞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜鸡。 院中可真熱鬧胯努,春花似錦、人聲如沸逢防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胞四。三九已至恬汁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辜伟,已是汗流浹背氓侧。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留导狡,地道東北人约巷。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像旱捧,于是被迫代替她去往敵國和親独郎。 傳聞我的和親對象是個殘疾皇子踩麦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容