更改另一个滑块时更新材质滑块 UI

Posted

技术标签:

【中文标题】更改另一个滑块时更新材质滑块 UI【英文标题】:Update Material slider UI when another slider is changed 【发布时间】:2019-04-22 17:40:10 【问题描述】:

我的输入有问题。两个输入均已连接。当你点击第一个时,第二个输入会移动,但 css 不会更新。

var $ra1 = $('#range1');
var $ra2 = $('#range2');

$ra1.on('input', function() 
    $ra2.val(this.max - this.value);
);
$ra2.on('input', function() 
    $ra1.val(this.max - this.value);
);
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Range 1
<input type="range" min="0" max="400" value="0" class="mdl-slider mdl-js-slider " id="range1">

Range 2
<input type="range" min="0" max="400" value="400" class="mdl-slider mdl-js-slider" id="range2">

编辑: 我找到了 IE11 的解决方法

var $ra1 = $('#range1');
var $ra2 = $('#range2');
if (navigator.appName == 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie == 1))
    $ra1.change(function()
        $ra2.get(0).MaterialSlider.change(this.max - this.value);
    );
    $ra2.change(function()
        $ra1.get(0).MaterialSlider.change(this.max - this.value);
    );
 else
    $ra1.on('input', function() 
        $ra2.get(0).MaterialSlider.change(this.max - this.value);
    );
    $ra2.on('input', function() 
        $ra1.get(0).MaterialSlider.change(this.max - this.value);
    );
 
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Range 1
<input type="range" min="0" max="400" value="0" class="mdl-slider mdl-js-slider " id="range1"> 
Range 2
<input type="range" min="0" max="400" value="400" class="mdl-slider mdl-js-slider" id="range2">

【问题讨论】:

这是 Material Design Lite 框架 【参考方案1】:

为此,您需要通过 Material 库而不是 jQuery 设置值,以便它更新 UI。为此,请在 DOM 元素的 MaterialSlider 属性上使用 change 函数,如下所示:

var $ra1 = $('#range1');
var $ra2 = $('#range2');

$ra1.on('input', function() 
  $ra2.get(0).MaterialSlider.change(this.max - this.value);
);

$ra2.on('input', function() 
  $ra1.get(0).MaterialSlider.change(this.max - this.value);
);
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Range 1
<input type="range" min="0" max="400" value="0" class="mdl-slider mdl-js-slider " id="range1"> Range 2
<input type="range" min="0" max="400" value="400" class="mdl-slider mdl-js-slider" id="range2">

【讨论】:

IE11好像不支持 这很不幸。如果您需要 IE11 支持,我建议您向 Materialize 开发人员提出意见,或使用其他库。

以上是关于更改另一个滑块时更新材质滑块 UI的主要内容,如果未能解决你的问题,请参考以下文章

滑块更改会影响其他表格单元格

根据滑块的值更改 UI 中的图像

当我以编程方式制作滑块时,为啥滑块不更新标签?

将jQuery滑块限制为另一个滑块的值

自定义 UI 滑块,拇指图像大小问题

滑块值更改时快速更新表格中的单元格数