【问题标题】:Which event should a slider (range) fire to properly work?滑块(范围)应该触发哪个事件才能正常工作?
【发布时间】:2017-10-06 22:07:14
【问题描述】:

我有以下输入,我将其转换为滑块:

    <div id="slidecontainer">
      <input #ranger type="range" min="{{minInterval}}" max="{{maxInterval}}" step="100" [(ngModel)]="interval"
        (click)="onStart()" class="slider">
    </div>

(click) 似乎是错误的角度事件。每当拖动它并放开它时,当鼠标指针没有悬停在滑块上时,onStart() 将不会被执行。

我尝试了其他事件,例如 (dragexit)、(mouseup) 或其他任何事件,但都没有奏效。当我拖动这个滑块时,无论鼠标在哪里,它都会执行onStart()-方法。

这是我的 CSS(AFAIK 应该没关系):

#slidecontainer {
  width: 100%;
  padding-bottom: 10px;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

.slider:hover {
  opacity: 1; /* Fully shown on mouse-over */
}

这些是我的组件中的数字(在 HTML 文件中提到):

  interval: number = 3000;
  minInterval: number = 0;
  maxInterval: number = 5000;

【问题讨论】:

  • (mousedown)="onStart()"?

标签: html css angular dom-events


【解决方案1】:

尝试使用 onChange 或 ng-change。每当滑块的值发生更改时,这些都会触发,因此即使鼠标从滑块上移开,该事件也会激活。

希望有帮助

【讨论】:

    【解决方案2】:

    您应该像这样使用内置的更改事件来监听更改:

    (change)="onStart(ranger.value)"
    

    所以你的输入应该是这样的:

     <input #ranger type="range" min="{{minInterval}}" max="{{maxInterval}}" step="100" [(ngModel)]="interval"
            (change)="onStart(ranger.value)" class="slider">
    

    【讨论】:

    • 太好了,我认为只要变量发生变化,就会执行“更改”,而不仅仅是当您松开滑块时。我有一个代表滑块值的标签。那一个会即时更改,而(更改)只会在“mouseup”(基本上)上触发。谢谢!
    • 您好,只是一个旁注。我们理所当然地删除了此处的称呼,因此请不要将它们添加到您的帖子中。 Meta 上有很多对这个指南的引用,但主要的是 is this one.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多