在 UISlider 下添加数字

2023-12-24

我有一个用它实现的 UISliderJQuery UI。我想在显示数字的滑块下添加一个图例。我跟着这个答案 https://stackoverflow.com/a/16877678/4861207它展示了如何实现这一点,然后将数字与百分比值一起放置。这样,当滑块大小发生变化(例如浏览器大小调整)时,数字仍然位于正确的位置。

这工作得很好,但如果浏览器窗口很小,或者滑块有很多数字,那么图例数字就会彼此太接近。

问题:
如果数字“x”太接近,我该如何删除它们。

这是我尝试做的:

if (i !== 0) {
    var prevLegendNum_offsetLeft = $('#legendNum' + i).closest('.sliderLegend').find('.sliderLegendNum').offset().left

    var distance = $('#legendNum' + i).offset().left - prevLegendNum_offsetLeft;
    console.log(distance); // Logs: 0

    if (distance <= 35) {
        $('#legendNum' + i).remove();
    }
}

我必须做这一切的原因prevLegendNum_offsetLeft,而且不仅仅是$('#legendNum' + (i - 1))是因为,如果有3个数字彼此之间的距离小于35,那么后面的2个数字i将被删除。然后它会尝试访问$('#legendNum' + (i - 1),但那不会在那里,所以它会返回一个错误。

当我运行上面的代码时,它会删除除第一个数字之外的所有数字。

JSFiddle http://jsfiddle.net/cesaxdn2/1/

$("#slider").slider({
    value: 4,
    min: 1,
    max: 15,
    step: 1
  })
  .each(function() {
    var opt = $(this).data().uiSlider.options;
    var vals = opt.max - opt.min;

    for (var i = 0; i <= vals; i++) {
      var el = $('<div class="sliderLegend"><div class="sliderLegendMark">|</div><div class="sliderLegendNum" id="legendNum' + i + '">' + (i + 2) + '</div></div>').css('left', (i / vals * 100) + '%');
      $('#slider').append(el);

      if (i !== 0) {
        var prevLegendNum_offsetLeft = $('#legendNum' + i).closest('.sliderLegend').find('.sliderLegendNum').offset().left

        var distance = $('#legendNum' + i).offset().left - prevLegendNum_offsetLeft;
        console.log(distance);

        if (distance <= 35) {
          $('#legendNum' + i).remove();
        }
      }
    }

  });
#slider > div {
  position: absolute;
  width: 20px;
  margin-left: -10px;
  text-align: center;
  margin-top: 20px;
}
/* below is not necessary, just for style */

#slider {
  width: 50%;
  margin: 2em auto;
}
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<div id="slider"></div>

你可以迭代所有.sliderLegend元素(第一个元素除外),并将该元素的左侧位置与最近的前一个元素的右侧位置进行比较。

如果最近的前一个元素的右侧大于当前元素的左侧,则您知道它们重叠,并且可以删除当前正在迭代的元素。

在下面的例子中,条件是left < prevRight + 6,所以有一个6px缓冲。只需根据您想要的数字之间的间距调整该数字即可。

更新的示例 http://jsfiddle.net/67245u1b/

$('#slider .sliderLegend').slice(1).each(function() {
  var left = $(this).position().left,
    $prev = $(this).prevAll(':has(.sliderLegendNumber)').first(),
    prevRight = $prev.position().left + $prev.width(),
    $item = $(this).is(':last-child') ? $prev : $(this);

  if (left < prevRight + 6) {
    $item.find('.sliderLegendNumber').remove();
  }
});

此外,您遇到的部分问题是所有的孩子div元素的宽度固定为20px。因此,您无法准确计算元素的左偏移位置,因为文本会溢出。为了解决这个问题,我删除了固定宽度并添加了transform: translateX(-50%)为了使元素水平居中。

更新的示例 http://jsfiddle.net/67245u1b/

#slider > div {
  position: absolute;
  text-align: center;
  margin-top: 20px;
  transform: translateX(-50%);
}

1-50 的范围现在将生成以下内容:

1-100 的范围将生成以下内容:

此外,如果您还想删除这些行,请删除整个元素而不仅仅是数字:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 UISlider 下添加数字 的相关文章

随机推荐

  • 如何比较字符串和const char*?

    include
  • 使用 jest.run() 或 jest.runCLI() 运行所有测试或以编程方式运行 jest 的方法

    我该如何使用jest run or jest runCLI 以编程方式运行所有测试 我应该用什么作为论据 我试图找到有关它们的文档但失败了 如果上述函数不起作用 如果我想以编程方式运行 jest 我应该调用什么 Jest 不应该以编程方式运
  • 在正在进行的通话中播放音频剪辑

    是否可以通过在通话期间叠加音轨来修改当前通话 我查找了 SDK 但在文档中找不到任何 API 来执行此操作 我正在尝试研究在正在进行的通话中播放先前录制的通话 音频剪辑的可行性 是否可以通过在通话期间叠加音轨来修改当前通话 不 抱歉 没有
  • 将 IBM 移动应用程序构建器连接到 Cloudant JSON 数据 - bluemix-mobile-services

    我正在使用 IBM Bluemix Mobile App Builder 工具 并了解它目前处于实验阶段 但在将该工具连接到现有 JSON 数据源时遇到问题 我尝试连接到 Bluemix 中的 Cloudant 实例 但找不到将 App B
  • 在数组、列表中查找异常值

    我有数组形式的销售统计数据 可以根据该数据计算标准差或平均值 stats 100 98 102 100 108 23 120 假设 20 的差异是正常情况 23显然是一个特例 找到这个不寻常值的最佳算法是什么 在任何语言 伪或任何原理中 你
  • 跨单页视图翻转和多页翻转维护应用程序状态

    嗯 随着技术的进步 我们很久以前解决的问题再次出现 回到黑暗时代 当 PHP 和 ASP 被认为很棒时 我们总是遇到视图状态的问题 如果您有一个页面 上面有十几个选择组合框 您的用户选择一些组合并点击下一步 然后意识到他们搞砸了并点击浏览器
  • 为什么 FileInputStream read() 方法在进入无限循环时错误地读取问号(ascii: 63)?

    网站上有一些类似的问题 但都在不同的场景中使用过 所以 我在这里问 package Assign6B import java io FileInputStream import java io FileOutputStream import
  • Julia:文档字符串和 LaTeX

    朱莉娅有docstrings功能 记录在此处https docs julialang org en stable manual documentation https docs julialang org en stable manual
  • 动态地将事件处理程序添加到 React.DOM 元素

    我正在使用 RadioButtonGroup 组件 它类似于无线电输入但带有按钮 如果使用该组件像这样简单就好了 var SelectThing React createClass render function render I woul
  • 使用 RedBean PHP 清空或截断表?

    我使用 RedBean PHP 进行测试 我非常喜欢它 但是我不知道如何截断表 我可以获取所有豆子并删除它们 但这看起来很麻烦 在 RedBean 1 3 中 您可以使用 R wipe type 来截断表
  • 在函数内部定义全局变量

    像python一样可以在函数内定义全局变量吗 例如 在Python中 def testFunc global testVar testVar 1 有没有办法在函数内的 javascript 中定义 testvar 全局 简单地忽略var关键
  • 在 Imagemagick 中创建空白图像

    如何通过命令行在 Imagemagick 中创建空白的新图像 Using background不起作用 convert size 800x800 background white x png convert no images define
  • Seaborn 头衔位置

    我的图表标题的位置在这方面很糟糕jointplot 我试过移动loc left right and center但它不会从它所在的位置移动 我也尝试过类似的方法ax title set position 3 15 基于该网站的其他建议 但这
  • 为什么 qsort 中的排序方法改变了我的数组?

    https phaxis org 2012 07 12 get sorted index orderting of an array https phoxis org 2012 07 12 get sorted index ordertin
  • 使用 Spring 解码主体参数

    我正在使用 Spring 为 Slack 应用程序开发 REST API 后端 我能够从 Slack 接收消息 斜线命令 但无法正确接收组件交互 按钮单击 The 官方文档 https api slack com docs message
  • 批量回显 URL

    编辑 变量没有正确定义 我不知道为什么 但我找到了解决方法 只需要 6 页 我创建了第 7 页 它将立即返回到第 1 页 因此不再需要 HTMLNxtpg 变量 我正在尝试创建一个批处理文件 它将生成一个 HTML 文件 这样用户就不需要任
  • 寻找干净的 C# WinForms MVC 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何创建丰富的用户界面 Windows 应用程序 例如 Photo Shop 我正在寻找使用 C 的 WinForms 的干净 MVC 教
  • 哪个最适合数据存储结构/类?

    我们在 SO 中看到了很多关于 c 中的类与结构的讨论 大多以结论说它是一个结束堆 栈内存分配 并建议在中使用结构小数据结构 现在我面临着在这两个选择中决定简单数据存储的情况 目前 在我们的应用程序中 我们有数千个类 仅充当简单的数据存储
  • CodeIgniter 辅助函数可以使用数据库函数吗?

    我的 CodeIgniter 控制器函数之一需要调用递归函数作为其功能的一部分 如果我将函数调用放在控制器类中 函数调用就会阻塞 并且它无法访问数据库函数 this gt db gt get 如果我把它放在课堂之外 让它成为辅助函数可以解决
  • 在 UISlider 下添加数字

    我有一个用它实现的 UISliderJQuery UI 我想在显示数字的滑块下添加一个图例 我跟着这个答案 https stackoverflow com a 16877678 4861207它展示了如何实现这一点 然后将数字与百分比值一起