zoukankan      html  css  js  c++  java
  • H5中input中range类型的美化及其

    目前在开发移动web的时候,使用到了input的range类型,涉及到了美化,那接下来就给大家说一说关于美化的问题

    1、如何使用滑动条?
    用法很简单,如下所示:

    <input type="range" value="0">
    1
    1
    各浏览器原始样式如下:
    Chrome: 
    Firefox:  
    IE 9+:      
    常用(部分)属性如下:

    属性    描述
    max    设置或返回滑块控件的最大值
    min    设置或返回滑块控件的最小值
    step    设置或返回每次拖动滑块控件时的递增量
    value    设置或返回滑块控件的 value 属性值
    defaultValue    设置或返回滑块控件的默认值
    autofocus    设置或返回滑块控件在页面加载后是否应自动获取焦点


    2、如何美化滑动条?
    首先提一个问题有哪些方式能完成对滑动条的美化?目前我所能想到的就是如下的两种方案:

    直接通过css完成样式改造
    将滑动条隐藏(设置opacity: 0),通过自定义div实现
    这次所要介绍的第一种较为简单的实现方式。


    3、具体的实现方案是什么?
    美化滑动控件,需要完成以下的五个步骤:

    去除系统默认的样式;
    给滑动轨道(track)添加样式;
    给滑块(thumb)添加样式;
    根据滑块所在位置填充进度条;
    实现多浏览器兼容。
    以上就是实现滑动控件美化的整个流程。我们今天所要达到的效果是这样的:如果想要实现填充进度条的效果,在IE 9以上的浏览器中可以使用::-ms-fill-lower 和 ::-ms-fill-upper来自定义进度条;在Firefox浏览器中则可以通过::-moz-range-progress来自定义;而Chrome浏览器中不支持直接设置进度条,而达到填充的效果,所以首先针对Chrome浏览器来实现整个流程。

    3.1 去除系统默认的样式
    这是美化滑动控件的第一步,这步操作是为了不使用原有的样式,使之后的自定义样式有效。代码很简单如下所示,不过要注意的是对基于 webkit 的浏览器,如Chrome, Safari, Opera等,滑块也要移除默认样式。

    input[type=range] {
        -webkit-appearance: none;
        300px;
        border-radius: 10px; /*这个属性设置使填充进度条时的图形为圆角*/
    }
    input[type=range]::-webkit-slider-thumb {
        -webkit-appearance: none;
    }    


    3.2 给滑动轨道(track)添加样式
    正式开始自定义控件样式了。首先是自定义滑动控件的轨道,代码很简单,直接贴出来。

    input[type=range]::-webkit-slider-runnable-track {
        height: 15px;
        border-radius: 10px; /*将轨道设为圆角的*/
        box-shadow: 0 1px 1px #def3f8, inset 0 .125em .125em #0d1112; /*轨道内置阴影效果*/
    }


    原始的控件获取到焦点时,会显示包裹整个控件的边框,所以还需要把边框取消。

    input[type=range]:focus {
        outline: none;
    }


    3.3 给滑块(thumb)添加样式
    下面对滑块的样式进行变更,css代码也不是很复杂,如下所示:

    input[type=range]::-webkit-slider-thumb {
        -webkit-appearance: none;
        height: 25px;
        25px;
        margin-top: -5px; /*使滑块超出轨道部分的偏移量相等*/
        background: #ffffff;
        border-radius: 50%; /*外观设置为圆形*/
        border: solid 0.125em rgba(205, 224, 230, 0.5); /*设置边框*/
        box-shadow: 0 .125em .125em #3b4547; /*添加底部阴影*/
    }

    3.4 根据滑块所在位置填充进度条
    新建一个RangeSlider.js文件,实现对滑动控件属性的设置、事件的监听、以及设置回调函数。监听input事件时,对进度条进行填充,让我们来直接看看代码是怎么实现的。

    $.fn.RangeSlider = function(cfg){
        this.sliderCfg = {
            min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null,
            max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,
            step: cfg && Number(cfg.step) ? cfg.step : 1,
            callback: cfg && cfg.callback ? cfg.callback : null
        };
     
        var $input = $(this);
        var min = this.sliderCfg.min;
        var max = this.sliderCfg.max;
        var step = this.sliderCfg.step;
        var callback = this.sliderCfg.callback;
     
        $input.attr('min', min)
            .attr('max', max)
            .attr('step', step);
     
        $input.bind("input", function(e){
            $input.attr('value', this.value);
            $input.css( 'background', 'linear-gradient(to right, #059CFA, white ' + this.value + '%, white)' );
     
            if ($.isFunction(callback)) {
                callback(this);
            }
        });
    };

    通过cfg对象来设置滑动控件的min, max, step属性。
    对控件绑定input事件,当滑块滑动时会触发该事件,此时完成对进度条的填充,这里我使用的是线性渐变linear-gradient(to right, #059CFA, white ’ + this.value + ‘%, white)这种方式,淡蓝色和白色两种颜色从左至右渐变,渐变的长度根据此时控件的value来确定。事件触发时同时调用回调函数,回调函数完成的功能可自行设计。
    当然你还可以根据自己的需求来监听其他事件,比如change事件,当value值改变时会触发,用法上很灵活。
    如何调用这个js文件里的函数来完成配置呢?很简单,首先在html文件里导入这个js文件,然后直接定义script节点,html代码如下:

    <!DOCTYPE html>
    <html>
        <head>
        <title>demo</title>
            <script type="text/javascript" src="lib/jquery.js"></script>
            <script type="text/javascript"src="src/RangeSlider.js"></script>
            <link rel="stylesheet" href="css/slider.css" type="text/css">
        </head>
     
        <body>
            <div id="test">
                <input type="range" value="0">
            </div>
     
            <script>
                var change = function($input) {
                    /*内容可自行定义*/
                    console.log("123");
                }
     
                $('input').RangeSlider({ min: 0,   max: 100,  step: 0.1,  callback: change});
     
            </script>
        </body>
    https://blog.csdn.net/weixin_38930535/article/details/79542130

  • 相关阅读:
    Junit单元测试
    点餐系统
    文件的横纵转换
    零碎知识--日积月累
    json校验
    程序员必须收藏的14个顶级开发社区!
    管理员权限
    Thinking In Java 读书笔记
    学生考试系统
    JeeSite开发笔记
  • 原文地址:https://www.cnblogs.com/0826sw/p/11917655.html
Copyright © 2011-2022 走看看