微信小程序 slider 翻转最大和最小值

微信小程序 slider 翻转最大和最小值

场景

我想使用 slider 时最左边是 10 最右是 -10
但是想当然的直接改成<slider min="10" max="-10" step="1" /> 并没用。
查了文档和社区也没有现成的解决方案。

代码示例

在这里插入图片描述

index.wxml

<scroll-view class="scroll-area" type="list" scroll-y>
  <view class="intro">翻转 slider 的最大和最小值</view>
  <button type="default">翻转后的值:{
  {value}}</button>
  <slider bindchanging="sliderChange" bindchange="sliderChange"  show-value="true"
          min="-10" max="10" step="1" value="{
    {sliderValue}}"/>
</scroll-view>

index.js

const util = require("../utils/util.js");

Page({
   
  data: {
   
    sliderValue: 0,
    value: 0,
  },
  onLoad() {
   
  },
  sliderChange(e){
   
    let value = util.intervalMapping(e.detail.value, -10, 10, 10, -10);
    this.setData({
    value });
  }
})

util.js

/**
 * 区间映射
 * @param {*} value       输入值
 * @param {*} inputBegin  输入起始值
 * @param {*} inputEnd    输入结束值
 * @param {*} outputBegin 输出起始值
 * @param {*} outputEnd   输出结束值
 */
function intervalMapping(value, inputBegin, inputEnd, outputBegin, outputEnd) {
   
  if( value <= inputBegin ){
   
    return outputBegin;
  }else if(value >= inputEnd){
   
    return outputEnd;
  }
  return ((outputEnd - outputBegin) * (value - inputBegin)) / (inputEnd - inputBegin) + outputBegin;
}

/**
 * 区间映射
 * @param {*} value       输入值
 * @param {*} inputBegin  输入起始值
 * @param {*} inputMid    输入中间值
 * @param {*} inputEnd    输入结束值
 * @param {*} outputBegin 输出起始值
 * @param {*} outputMid   输出中间值
 * @param {*} outputEnd   输出结束值
 */
function intervalMappingABC(value, inputBegin, inputMid, inputEnd, outputBegin, outputMid, outputEnd) {
   
  if( value <= inputBegin ){
   
    return outputBegin;
  }else if(value == inputMid){
   
    return outputMid;
  }else if(value >= inputEnd){
   
    return outputEnd;
  }else if(value < inputMid){
   
    inputEnd = inputMid;
    outputEnd = outputMid;
  }else if(value > inputMid){
   
    inputBegin = inputMid;
    outputBegin = outputMid;
  }
  return ((outputEnd - outputBegin) * (value - inputBegin)) / (inputEnd - inputBegin) + outputBegin;
}

module.exports = {
   
  intervalMapping,
  intervalMappingABC
}

参考资料

微信小程序 表单组件 /slider
代码片段 https://developers.weixin.qq.com/s/jdYlT6m87NNp

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 17:04:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 17:04:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 17:04:06       82 阅读
  4. Python语言-面向对象

    2023-12-05 17:04:06       91 阅读

热门阅读

  1. 暴力破解攻击与彩虹表攻击

    2023-12-05 17:04:06       54 阅读
  2. 4、单例模式(Singleton Pattern)

    2023-12-05 17:04:06       53 阅读
  3. mySql笔记

    2023-12-05 17:04:06       54 阅读
  4. Android : ViewModel_解决textView 横竖屏数据丢失

    2023-12-05 17:04:06       51 阅读
  5. 【Android】Window和WindowManager

    2023-12-05 17:04:06       55 阅读
  6. 好用的chatgpt工具用过这个比较快

    2023-12-05 17:04:06       66 阅读
  7. 【Android】布局优化方案

    2023-12-05 17:04:06       62 阅读
  8. 微前端个人理解与简单总结

    2023-12-05 17:04:06       61 阅读