LuLu UI pure版中文文档 » Range范围选择

Fork Me

Range范围选择

作为插件单独使用

引入如下CSS和JS:

<link rel="stylesheet" href="https://qidian.gtimg.com/lulu/pure/css/common/ui/Tips.css">
<link rel="stylesheet" href="https://qidian.gtimg.com/lulu/pure/css/common/ui/Range.css">
<script src="https://qidian.gtimg.com/lulu/pure/js/common/ui/Follow.js"></script>
<script src="https://qidian.gtimg.com/lulu/pure/js/common/ui/Tips.js"></script>
<script src="https://qidian.gtimg.com/lulu/pure/js/common/ui/Range.js"></script>

或者引入合并的资源:

<link rel="stylesheet" href="https://qidian.gtimg.com/c/=/lulu/pure/css/common/ui/Tips.css,/lulu/pure/css/common/ui/Range.css">
<script src="https://qidian.gtimg.com/c/=/lulu/pure/js/common/ui/Follow.js,/lulu/pure/js/common/ui/Tips.js,/lulu/pure/js/common/ui/Range.js"></script>

基本使用示意

Range 组件默认会对 type="range" 区域选择框进行 UI 美化,通常无需进行任何的初始化。

如果存在范围选择框无法初始化的情况,请使用 new Range() 方法构造,参见“语法和参数”。

无需初始化演示

宽度:

HTML如下:

<input type="range" class="ui-range-input" value="50" min="0" max="100" step="10" data-tips="${value}px">

range 选择的最大值和最小值由原生的 minmax 属性控制,每次选择的范围由 step 属性控制。

三个属性都可以缺省,min 默认为 0max 默认为 100step 默认是 1

data-tips 的值为移动滑杆按钮时候出现的黑色提示内容,${value} 是个动态数据,表示当前<input> 元素实时 value 值。

事件处理演示

下面有张图片,拖动范围选择框,图片的透明度会发生变化。

全球高武

透明度:

透明度:<input type="range" id="r0" class="ui-range-input" value="50" min="0" max="100" data-tips="${value}%">
// 直接给 <input> 元素绑定 change 事件即可
r0.addEventListener('change', function () {
    img.style.opacity = this.value / 100;
});

符合LuLu UI的设计理念,UI视觉与业务逻辑相分离。

负数跨度测试

看看能不能准确从 -10 滑到 10

HTML如下:

<input type="range" class="ui-range-input" value="5" min="-10" max="10">

朝下显示测试

如果范围选择框位置很靠浏览器上边缘,希望黑色的提示朝下,则和 Tips 组件一样,加一个类名 .reverse 过着添加 reverse 属性就可以了,例如:

HTML如下:

<input type="range" class="ui-range-input reverse">
<input type="range" class="ui-range-input" reverse>

动态改变选中的范围值

HTML 代码和 JS 代码如下:

<p><input type="range"class="ui-range-input" id="r1" min="1"></p>
<button id="b1">改变值(随机)</button>
b1.addEventListener('click', function () {
    // range DOM 元素上 data.range 就是范围选择实例对象
    调用该实例暴露的 value 方法改变 range <input> 的值和滑块位置
    r1.data.range.value(Math.ceil(100 * Math.random()));
});

disabled 禁用测试

处于禁用状态的时候,范围选择框无法滑动,无法点击,无法聚焦,且视觉半透明。

button.addEventListener('click', function () {
    range.disabled = !range.disabled;
});

宽度 100% 演示

<div class="ui-range-input"><input type="range" data-tips="值:${value}"></div>

或者使用width="100%",例如:

<input type="range" class="ui-range-input" width="100%">

保持原生的 UI

给滑块选择输入框设置属性 is-visible 可以让其保持默认的 UI 效果。

<input type="range" is-visible>

需要注意的是 IE9 浏览器原生不支持 range 框,因此,IE9 浏览器下会表现为普通的输入框。

动态加载和删除

<button id="bi" class="ui-button" data-type="primary">添加</button>
<button id="br" class="ui-button" data-type="danger">删除</button>
bi.addEventListener('click', function () {
    this.insertAdjacentHTML('afterend', '<p><input type="range"></p>');
});
br.addEventListener('click', function () {
    var prev = this.previousElementSibling;
    if (prev.matches('p')) {
        prev.remove();
    }
});

语法和参数

var myRange = new Range(element, options);

其中:

element
必需。Element 元素或者 String 选择器。指 HTML 原生的 range 选择框。
options
可选。Object纯对象。可选参数见下表:
参数名称 支持类型 默认值 释义
reverse Boolean false 黑色 tips 是否朝下显示。默认朝上,设置为 true 则朝下显示。

element 设置类名 reverse 有同样的效果。

tips Function function (value) {
  return value;
}
如果 tips 是 Function,则其返回值会作为黑色 tips 的内容显示。其中,上下文 this 指的是滑杆按钮元素,支持一个参数 value,为 element 的当前值。

如果 tips 属性值为 null, 则表示不显示黑色 tips 提示。

element 设置 data-tips 属性有类似效果,例如 data-tips="null" 表示不出现黑色提示。动态值使用 ${value} 匹配,例如 data-tips="${value}%" 会出现类似 50% 这样的黑色提示。

本组件依赖 Tips 组件。

关于实例对象

myRange就是返回的实例对象,暴露了以下属性和方法:

{
    element:{
        // 容器
        container: null,
        // 轨道
        track: null,
        // 按钮
        thumb: null
    },
    number: {
        // 最小值
        min: 1,
        // 最大值
        max: 100,
        // 步阶
        step: 1
    }
    params: {
        // 是否朝下
        reverse: false,
        // 黑色提示内容
        tips: function (value) {
            return value;
        }
    },
    // 是否可用
    disabled: false,
    // 赋值
    value: function (value) {},
    // 滑杆按钮定位
    position: function () {}
}

增删监听测试

button.addEventListener('click', function () {
    var eleRange = document.createElement('input');
    eleRange.setAttribute('type', 'range');
    // for非原生IE9
    eleRange.className = 'ui-range-input';
    // 插入到后面
    eleBtnAdd.parentElement.after(eleRange);
});

button.addEventListener('click', function () {
    range.remove();
    this.disabled = true;
});

删除原生的 range 范围选择框即可。

本页贡献者:

zhangxinxu,5ibinbin