1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【組件庫】自定義slider組件

        共 7293字,需瀏覽 15分鐘

         ·

        2021-07-30 15:34

        效果展示

        自定義slider組件

        Demo代碼

        index.wxml

        <text>slider組件自定義</text> {{value}}
        <view class="component-slider">
            <!-- 覆蓋slider組件盒子 -->
            <view class="slider-box">
                <!-- 拖動按鈕 -->
                <view class="slider-btn" style="margin-left: {{ (value-min)*(102/(max-min))-7 }}%;" ></view>
                <!-- 未選中區(qū)線 -->
                <view class="slider-line"></view>
                <!-- 選中區(qū)線 -->
                <view class="slider-line-active" style="width: {{ (value-min)*(102/(max-min))-7 }}%;"></view>
                <!-- 顯示數(shù)字 -->
                <view class="slider-number">
                    <!-- 最小限制大于等于0 -->
                    <block  wx:if="{{min>=0}}" >
                        <block wx:for="{{max+1}}" wx:key="index" >
                            <text class="{{value==item?'active':''}}" style="left:{{ (item-min)*(100/(max-min))-2 }}%" >{{item}}</text>
                        </block>
                    </block>
                    <!-- 最小限制小于0 -->
                    <block wx:else>
                        <block wx:for="{{(max-min)+1}}" wx:key="index">
                            <text class="{{value==(item+min)?'active':''}}" style="left:{{ (item)*(102/(max-min))-2 }}%" >{{item+min}}</text>
                        </block>
                    </block>
                </view>
            </view>
            <!-- slider組件 -->
            <slider block-size="28" bindchange="sliderchange" bindchanging="sliderchanging" min="{{min}}" max="{{max}}" value="{{value}}" />
        </view>

        index.wxss

        .component-slider {
          width90%;
          position: relative;
          margin0rpx auto 0rpx;
          padding70rpx 0 70rpx;
        }

        /* 盒子 */
        .slider-box {
          width88%;
          margin0 auto;
          position: absolute;
          left50%;
          top50%;
          transformtranslate(-50%, -50%);
        }

        /* 未選中區(qū)線 */
        .slider-line {
          width100%;
          height10rpx;
          backgroundrgba(911502460.1);
          margin0 auto;
          position: absolute;
          left50%;
          top50%;
          transformtranslate(-50%, -50%);
        }

        /* 選中區(qū)線 */
        .slider-line-active {
          position: absolute;
          left0;
          top50%;
          transformtranslate(0, -50%);
          height10rpx;
          background#5B96F6;
        }

        /* slider按鈕 */
        .slider-btn {
          width70rpx;
          height35rpx;
          background#5B96F6;
          border-radius20rpx;
        }

        /* 顯示的數(shù)字 */
        .slider-number {
          width100%;
          position: absolute;
          bottom: -10rpx;
        }

        .slider-number text {
          position: absolute;
          top0;
          font-size24rpx;
          color#999999;
          transition: all 0.3s;
        }

        /* 當(dāng)前選中的數(shù)字 */
        .slider-number text.active {
          font-size32rpx;
          color#5B96F6;
          transition: all 0.3s;
        }

        /* slider組件設(shè)置透明 */
        slider {
          opacity0;
        }

        index.json

        {
          "usingComponents": {}
        }

        index.js

        Page({
          data: {
              min0,  // 最小限制 
              max:5,   // 最大限制
              value:0// 當(dāng)前value
          },
          // 拖動過程中觸發(fā)的事件
          sliderchanging(e){
              var value = e.detail.value;
              this.setData({ value: value })
          },
          // 完成一次拖動后觸發(fā)的事件
          sliderchange(e){
              var value = e.detail.value;
              this.setData({ value: value })
          }
        })

        思路

        本質(zhì)上其實(shí)還是利用的是原生的slider,只是將其透明度設(shè)置為0,用戶看不到,然后再在其上面添加一個自定義按鈕,同時進(jìn)度條也是需要重新繪制

        在代碼中可以看到:

         <!-- 拖動按鈕 -->
          <view class="slider-btn" style="margin-left: {{ (value-min)*(102/(max-min))-7 }}%;"></view>

        其中margin-left: {{ (value-min)*(102/(max-min))-7 }}%;就是動態(tài)設(shè)置按鈕的位置

        按照常理來說,應(yīng)該是  (value-min)*(100/(max-min))}}% 「【解釋:只需要算出當(dāng)前值占總長的幾分之幾就可以了,其實(shí)是(value-min)/(max-min) ??100】」

        舉個例子:總范圍是0-10,此時的數(shù)值是7,那么已經(jīng)滑動距離占總長的:(7-0)/10=0.7,這里需要百分?jǐn)?shù),所以乘了100

        當(dāng)css樣式為margin-left:(value-min)*(100/(max-min))}}%時

        可以發(fā)現(xiàn),自定義滑塊并沒有與原生slider重合,所以需要稍微調(diào)整一下 得到:margin-left: {{ (value-min)*(102/(max-min))-7 }}%

        而進(jìn)度條中的style就可以設(shè)置為:"width: {{ (value-min)*(100/(max-min)) }}%;

        具體看自定義滑塊、線條的定義,再進(jìn)行一定的微調(diào)即可

        舉一反三

        修改slider按鈕css樣式就可以了

        /* slider按鈕 */
        .slider-btn {
          width70rpx;
          height70rpx;
          background#5B96F6;
          border-radius100%;
        }

        當(dāng)然,線條、按鈕的格式也可以自定義為其他樣式

        修改部分:wxml

          <view class="slider-btnstyle="background#ed5a65;margin-left: {{ (speed_left-min)*(102/(max-min))-7 }}%;">L
              </view>

        wxss

        .slider-btn {
          width80rpx;
          height45rpx;
         font-size18px;
         color: white;
         text-align: center;
         padding: -1px;
          border-radius20rpx;
        }

        最后

        參考:

        • https://www.cnblogs.com/sanyekui/p/14069690.html
        • 微信開放文檔

        寫留言

        瀏覽 69
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产日韩欧美操逼 | 国产精品久久99精品国产 | 天天三级片| 无码人妻在线 | 91精品国产综合久久香蕉第1集 | 51免费看成人啪啪片 | AAA国产高清视频在线观看 | 亚洲草逼图 | 婷婷一区二区三区成人 | 体育馆高h调教被狂c躁到高潮 |