Нанести другой цвет на две части входного диапазона - PullRequest
7 голосов
/ 23 апреля 2019

Я пытаюсь создать панель поиска для видео и хочу показать черный цвет на панели поиска, представляющий количество видео, которое было загружено. Как я могу назначить дополнительный цвет на панели поиска, представляющий количество загруженного видео?

Я думаю, что не правильно объяснил свой вопрос. Я хочу цвет (например, серебро), который показывает количество видео, которое было загружено для воспроизведения. Серебряный цвет на панели поиска можно найти по умолчанию html5 video и YouTube video player. (Изображение предоставлено ниже)

var player = document.querySelector("video"),
    seek_bar = document.querySelector("input"),
    _console = document.querySelector("div");

player.ontimeupdate = function() {
  seek_bar.value = this.currentTime.toString().split(".")[0];
}
player.addEventListener('progress', function() {
  try {
    _console.innerHTML = "Downloaded Upto: " + this.buffered.end(0).toString().split(".")[0];
  } catch(e) {}
});
video {
  width: 90%;
  height: 75%;
}
input[type="range"] {
  width: 90%;
  height: 10px;
  background: rgb(110, 170, 250);
  border: 1px solid rgb(15, 15, 15);
  border-radius: 50px;
  -webkit-appearance: none !important;
}
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none !important;
  background: rgb(15, 15, 15);
  height: 20px;
  width: 20px;
  cursor: pointer;
  border-radius: 100%;
}
<html>
<head>
  <title></title>
</head>
<body>
  <video src="https://dash.akamaized.net/akamai/bbb/bbb_1920x1080_60fps_12000k.mp4" controls></video>
  <input type="range" min="0" value="0" max="634"/>
  <div></div>
</body>
</html>

SILVER (THE OTHER COLOR) ON THE SEEK_BAR:

image

image

Ответы [ 3 ]

2 голосов
/ 23 апреля 2019

Вот пример чего-то похожего, что я сделал пару лет назад: https://jsfiddle.net/remisture/esyvws3d/

$(window).on("load resize", function() {
  // Get the current width of the slider
  var sliderWidth = $('[type=range]').width();

  // Remove previously created style elements
  $('.custom-style-element-related-to-range').remove();

  // Add our updated styling
  $('<style class="custom-style-element-related-to-range">input[type="range"]::-webkit-slider-thumb { box-shadow: -' + sliderWidth + 'px 0 0 ' + sliderWidth + 'px;}<style/>').appendTo('head');
});
.container {
  margin: 0 auto;
  width: 500px;
}

input[type='range'] {
  width: 100%;
}

/*Chrome*/

@media screen and (-webkit-min-device-pixel-ratio:0) {
  input[type='range'] {
    overflow: hidden;
    -webkit-appearance: none;
    background-color: #9a905d;
  }
  input[type='range']::-webkit-slider-runnable-track {
    height: 10px;
    -webkit-appearance: none;
    color: #13bba4;
    margin-top: -1px;
  }
  input[type='range']::-webkit-slider-thumb {
    width: 10px;
    -webkit-appearance: none;
    height: 10px;
    cursor: ew-resize;
    background: #434343;
    color: #43e5f7;
  }
}


/** FF*/

input[type="range"]::-moz-range-progress {
  background-color: #43e5f7;
}

input[type="range"]::-moz-range-track {
  background-color: #9a905d;
}


/* IE*/

input[type="range"]::-ms-fill-lower {
  background-color: #43e5f7;
}

input[type="range"]::-ms-fill-upper {
  background-color: #9a905d;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="container">
  <input type="range">
</div>
0 голосов
/ 23 апреля 2019

Я хочу показать черный цвет на панели поиска , представляющий количество видео, которое было загружено .

Вотминимальный пример, который устанавливает фоновое изображение слайдера в линейный градиент путем опроса свойства buffered игрока. Это ожидаемый результат .

Обратите внимание, что свойство buffered может содержать пробелы.Например, когда вы перетаскиваете панель поиска из начала в середину, браузер не загружает промежуточную часть.Вам нужно перебрать свойство buffered и создать список из островов и соответствующим образом раскрасить строку поиска.

var player = document.querySelector("video");
var seek_bar = document.querySelector("input[type='range']");

player.addEventListener("loadedmetadata", function() {
  seek_bar.max = Math.floor(this.duration);
});
player.addEventListener("timeupdate", function() {
  seek_bar.value = Math.floor(this.currentTime);
});
player.addEventListener("progress", function() {
  var duration = this.duration, buffered = this.buffered, i, p1, p2, css = [];
  if (duration === 0) {
    return;
  }
  for (i = 0; i < buffered.length; i++) {
    p1 = Math.floor(buffered.start(i) / duration * 100) + "%";
    p2 = Math.floor(buffered.end(i) / duration * 100) + "%";
    // plot the start and stop point of each buffered range
    css.push("transparent " + p1);
    css.push("red " + p1);
    css.push("red " + p2);
    css.push("transparent " + p2);
  }
  seek_bar.style.backgroundImage = "linear-gradient(to right," + css.join(",") + ")";
});
video {
  width: 50%;
}
input[type="range"] {
  width: 50%;
  height: 10px;
  border: 1px solid rgb(15, 15, 15);
  border-radius: 5px;
  -webkit-appearance: none !important;
}
input[type="range"]::-webkit-slider-thumb {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgb(15, 15, 15);
  cursor: pointer;
  -webkit-appearance: none !important;
}
<video src="https://dash.akamaized.net/akamai/bbb/bbb_1920x1080_60fps_12000k.mp4" controls></video>
<input type="range" min="0" value="0">

Это более простая панель поиска, аналогичная той, что используется на YouTube. Это ожидаемый результат .

var player = document.querySelector("video");
var seek_bar = document.querySelector("input[type='range']");

player.addEventListener("loadedmetadata", function() {
  seek_bar.max = Math.floor(this.duration);
});
player.addEventListener("timeupdate", function() {
  seek_bar.value = Math.floor(this.currentTime);
});
player.addEventListener("progress", function() {
  var duration = this.duration, buffered = this.buffered, i, p = this.currentTime;
  if (duration === 0) {
    return;
  }
  for (i = 0; i < buffered.length; i++) {
    // find the buffered range that contains current playback time
    if (buffered.start(i) <= p && p <= buffered.end(i)) {
      p = buffered.end(i);
      break;
    }
  }
  seek_bar.style.backgroundImage = "linear-gradient(to right,red " + Math.floor(p / duration * 100) + "%,transparent " + Math.floor(p / duration * 100) + "%)";
});
video {
  width: 50%;
}
input[type="range"] {
  width: 50%;
  height: 10px;
  border: 1px solid rgb(15, 15, 15);
  border-radius: 5px;
  -webkit-appearance: none !important;
}
input[type="range"]::-webkit-slider-thumb {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgb(15, 15, 15);
  cursor: pointer;
  -webkit-appearance: none !important;
}
<video src="https://dash.akamaized.net/akamai/bbb/bbb_1920x1080_60fps_12000k.mp4" controls></video>
<input type="range" min="0" value="0">
0 голосов
/ 23 апреля 2019

Для этого я бы использовал элемент HTML progress.

Вот как бы вы его стилизовали, если бы вы хотели, чтобы индикатор, отображающий количество загруженного видео, имел черный цвет.

progress
  -webkit-appearance: none /* Important, otherwise your styles won't have effect */

progress::-webkit-progress-value
  background: black

Вот живая демонстрация Codepen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...