react-film
Version:
React component for showing carousel just like a film strip
34 lines (26 loc) • 4.39 kB
JavaScript
import * as browser from './browser';
export default function computeScrollLeft(dir, scrollable, itemContainer, index) {
var rtl = dir === 'rtl';
if (itemContainer && scrollable) {
var items = itemContainer.children; // This will enumerate <li> inside <FilmStrip>
var item = items[Math.max(0, Math.min(items.length - 1, index))];
if (item) {
if (scrollable.offsetWidth === scrollable.scrollWidth) {
return 0;
} // eslint-disable-next-line no-magic-numbers
var result = item.offsetLeft + (item.offsetWidth - scrollable.offsetWidth) / 2;
if (rtl) {
result = Math.min(result, 0);
result = Math.max(result, scrollable.offsetWidth - scrollable.scrollWidth);
} else {
result = Math.max(result, 0);
result = Math.min(result, scrollable.scrollWidth - scrollable.offsetWidth);
}
if (rtl && (browser.edgeUWP || browser.internetExplorer)) {
result = -result;
}
return result;
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wdXRlU2Nyb2xsTGVmdC5qcyJdLCJuYW1lcyI6WyJicm93c2VyIiwiY29tcHV0ZVNjcm9sbExlZnQiLCJkaXIiLCJzY3JvbGxhYmxlIiwiaXRlbUNvbnRhaW5lciIsImluZGV4IiwicnRsIiwiaXRlbXMiLCJjaGlsZHJlbiIsIml0ZW0iLCJNYXRoIiwibWF4IiwibWluIiwibGVuZ3RoIiwib2Zmc2V0V2lkdGgiLCJzY3JvbGxXaWR0aCIsInJlc3VsdCIsIm9mZnNldExlZnQiLCJlZGdlVVdQIiwiaW50ZXJuZXRFeHBsb3JlciJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLQSxPQUFaLE1BQXlCLFdBQXpCO0FBRUEsZUFBZSxTQUFTQyxpQkFBVCxDQUEyQkMsR0FBM0IsRUFBZ0NDLFVBQWhDLEVBQTRDQyxhQUE1QyxFQUEyREMsS0FBM0QsRUFBa0U7QUFDL0UsTUFBTUMsR0FBRyxHQUFHSixHQUFHLEtBQUssS0FBcEI7O0FBRUEsTUFBSUUsYUFBYSxJQUFJRCxVQUFyQixFQUFpQztBQUMvQixRQUFNSSxLQUFLLEdBQUdILGFBQWEsQ0FBQ0ksUUFBNUIsQ0FEK0IsQ0FDTzs7QUFDdEMsUUFBTUMsSUFBSSxHQUFHRixLQUFLLENBQUNHLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDRSxHQUFMLENBQVNMLEtBQUssQ0FBQ00sTUFBTixHQUFlLENBQXhCLEVBQTJCUixLQUEzQixDQUFaLENBQUQsQ0FBbEI7O0FBRUEsUUFBSUksSUFBSixFQUFVO0FBQ1IsVUFBSU4sVUFBVSxDQUFDVyxXQUFYLEtBQTJCWCxVQUFVLENBQUNZLFdBQTFDLEVBQXVEO0FBQ3JELGVBQU8sQ0FBUDtBQUNELE9BSE8sQ0FLUjs7O0FBQ0EsVUFBSUMsTUFBTSxHQUFHUCxJQUFJLENBQUNRLFVBQUwsR0FBa0IsQ0FBQ1IsSUFBSSxDQUFDSyxXQUFMLEdBQW1CWCxVQUFVLENBQUNXLFdBQS9CLElBQThDLENBQTdFOztBQUVBLFVBQUlSLEdBQUosRUFBUztBQUNQVSxRQUFBQSxNQUFNLEdBQUdOLElBQUksQ0FBQ0UsR0FBTCxDQUFTSSxNQUFULEVBQWlCLENBQWpCLENBQVQ7QUFDQUEsUUFBQUEsTUFBTSxHQUFHTixJQUFJLENBQUNDLEdBQUwsQ0FBU0ssTUFBVCxFQUFpQmIsVUFBVSxDQUFDVyxXQUFYLEdBQXlCWCxVQUFVLENBQUNZLFdBQXJELENBQVQ7QUFDRCxPQUhELE1BR087QUFDTEMsUUFBQUEsTUFBTSxHQUFHTixJQUFJLENBQUNDLEdBQUwsQ0FBU0ssTUFBVCxFQUFpQixDQUFqQixDQUFUO0FBQ0FBLFFBQUFBLE1BQU0sR0FBR04sSUFBSSxDQUFDRSxHQUFMLENBQVNJLE1BQVQsRUFBaUJiLFVBQVUsQ0FBQ1ksV0FBWCxHQUF5QlosVUFBVSxDQUFDVyxXQUFyRCxDQUFUO0FBQ0Q7O0FBRUQsVUFBSVIsR0FBRyxLQUFLTixPQUFPLENBQUNrQixPQUFSLElBQW1CbEIsT0FBTyxDQUFDbUIsZ0JBQWhDLENBQVAsRUFBMEQ7QUFDeERILFFBQUFBLE1BQU0sR0FBRyxDQUFDQSxNQUFWO0FBQ0Q7O0FBRUQsYUFBT0EsTUFBUDtBQUNEO0FBQ0Y7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZVNjcm9sbExlZnQoZGlyLCBzY3JvbGxhYmxlLCBpdGVtQ29udGFpbmVyLCBpbmRleCkge1xuICBjb25zdCBydGwgPSBkaXIgPT09ICdydGwnO1xuXG4gIGlmIChpdGVtQ29udGFpbmVyICYmIHNjcm9sbGFibGUpIHtcbiAgICBjb25zdCBpdGVtcyA9IGl0ZW1Db250YWluZXIuY2hpbGRyZW47IC8vIFRoaXMgd2lsbCBlbnVtZXJhdGUgPGxpPiBpbnNpZGUgPEZpbG1TdHJpcD5cbiAgICBjb25zdCBpdGVtID0gaXRlbXNbTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgaW5kZXgpKV07XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKHNjcm9sbGFibGUub2Zmc2V0V2lkdGggPT09IHNjcm9sbGFibGUuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICBsZXQgcmVzdWx0ID0gaXRlbS5vZmZzZXRMZWZ0ICsgKGl0ZW0ub2Zmc2V0V2lkdGggLSBzY3JvbGxhYmxlLm9mZnNldFdpZHRoKSAvIDI7XG5cbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5taW4ocmVzdWx0LCAwKTtcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCBzY3JvbGxhYmxlLm9mZnNldFdpZHRoIC0gc2Nyb2xsYWJsZS5zY3JvbGxXaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBNYXRoLm1heChyZXN1bHQsIDApO1xuICAgICAgICByZXN1bHQgPSBNYXRoLm1pbihyZXN1bHQsIHNjcm9sbGFibGUuc2Nyb2xsV2lkdGggLSBzY3JvbGxhYmxlLm9mZnNldFdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJ0bCAmJiAoYnJvd3Nlci5lZGdlVVdQIHx8IGJyb3dzZXIuaW50ZXJuZXRFeHBsb3JlcikpIHtcbiAgICAgICAgcmVzdWx0ID0gLXJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==