事象
DateTimePickerでの時間選択を行う際のスクロールが逆方向に動いてしまう。
原因
DateTimePickerのバグだと思われる。
GitHub上にissueがあった。
https://github.com/xdan/datetimepicker/issues/763
行なったこと
jquery.datetimepicker.full.min.js
のファイルがプロジェクト内にあったのバージョンアップを試みたが、プロジェクト内のファイルを他のメンバーが直接書き換えを行なったコミット履歴が存在したので該当箇所を直接書き換えることにした。
今回は709行目からのコードを書きえた。
GitHub上のissueと同じコードが存在しなかったので、バージョンによってコードが変わるのだと思われる。
i = l[0].clientHeight, s = o[0].offsetHeight, r = (n = i / s) * d[0].offsetHeight, 1 < n ? u.hide() : (u.show(), u.css("height", parseInt(10 < r ? r : 10, 10)), c = d[0].offsetHeight - u[0].offsetHeight, !0 !== a && l.trigger("scroll_element.xdsoft_scroller", [t || f / (s - i)]))
}), l.on("mousewheel", function (e) {
var t, a,
- n = (t = e.originalEvent, a = 0, "detail" in t && (a = t.detail), "wheelDelta" in t && (a = -t.wheelDelta / 120), "wheelDeltaY" in t && (a = -t.wheelDeltaY / 120), "axis" in t && t.axis === t.HORIZONTAL_AXIS && (a = 0), a *= 10, "deltaY" in t && (a = t.deltaY), a && t.deltaMode && (1 === t.deltaMode ? a *= 40 : a *= 800), a),
+ n = (t = e.originalEvent, a = 0, "detail" in t && (a = t.detail), "wheelDelta" in t && (a = -t.wheelDelta / 120), "wheelDeltaY" in t && (a = -t.wheelDeltaY / 120), "axis" in t && t.axis === t.HORIZONTAL_AXIS && (a = 0), a *= 10, "deltaY" in t && (a = t.deltaY),
+ // スクロール量の正規化
+ a = a < 0 ? Math.min(a, -1) : Math.max(a, 1), a && t.deltaMode && (a = (1 === t.deltaMode ? a * 40 : a * 800)), a),
+ // スクロール方向の調整
+ n = n * -1,
r = Math.max(0, f - n);
return l.trigger("scroll_element.xdsoft_scroller", [r / (s - i)]), e.stopPropagation(), !1
}), l.on("touchstart", function (e) {
n * -1,
学び
- スクロールの処理が逆方向に動く時は、JavaScriptで処理を行っている可能性が高いと学べた。
- プラグイン自体にバグがある可能性を疑う
今後の対応
プラグインが直接書き換えられている状態だと、アップデートが行えないのでアップデートを行えるようにする。