🌟 | 現在、 鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
「MediaWiki:Common.js」の版間の差分
ナビゲーションに移動
検索に移動
(row-stickyクラスが付与されたtrのstuck状態を監視する機能を追加) |
(クラスrow-stickyが見つからない場合、監視処理を追加しない) |
||
(同じ利用者による、間の5版が非表示) | |||
13行目: | 13行目: | ||
.css('left', Math.min( | .css('left', Math.min( | ||
$(window).width() - tooltip.outerWidth(), | $(window).width() - tooltip.outerWidth(), | ||
Math.round(offset.left - 0.5 * (tooltip.outerWidth() - obj.outerWidth())))) | Math.max( | ||
0, | |||
Math.round(offset.left - 0.5 * (tooltip.outerWidth() - obj.outerWidth()))))) | |||
.css('top', y) | .css('top', y) | ||
} | } | ||
39行目: | 41行目: | ||
function updateWidth(classname) { | function updateWidth(classname) { | ||
var | var targetSelectors = [ | ||
'tr:first th:nth-child(1), tr:first td:nth-child(1)', | |||
'tr:first th:nth-child(2), tr:first td:nth-child(2)', | |||
] | |||
// Reset the max width of each column in each table. | // Reset the max width of each column in each table. | ||
$("." + classname).each(function(index, elem) { | $("." + classname).each(function(index, elem) { | ||
$(elem).find( | $.each(targetSelectors, function(_, target) { | ||
}) | $(elem).find(target).first().width('') | ||
}) | |||
}) | |||
// Find the max width of each column across all tables. | // Find the max width of each column across all tables. | ||
var | var colWidths = new Array(targetSelectors.length).fill(0) | ||
$("." + classname).each(function(index, elem) { | $("." + classname).each(function(index, elem) { | ||
$.each(targetSelectors, function(idx, target) { | |||
colWidths[idx] = Math.max( | |||
colWidths[idx], | |||
}) | Math.ceil($(elem).find(target).first().width())) | ||
}) | |||
}) | |||
// Set each column in each table to the max width of that column across all tables. | // Set each column in each table to the max width of that column across all tables. | ||
$("." + classname).each(function(index, elem) { | $("." + classname).each(function(index, elem) { | ||
$(elem).find( | $.each(targetSelectors, function(idx, target) { | ||
}) | $(elem).find(target).first().width(colWidths[idx]) | ||
}) | |||
}) | |||
} | } | ||
function observeRowStickyStuckState() { | function observeRowStickyStuckState(classname) { | ||
var target = document.querySelector('.' + classname) | |||
if (target === null) return | |||
if (typeof IntersectionObserver === 'function') { | if (typeof IntersectionObserver === 'function') { | ||
var stuckClassname = ' | var stuckClassname = classname + '--stuck' | ||
new IntersectionObserver(function(entries | new IntersectionObserver(function(entries) { | ||
var entry = entries[ | for (var i = 0; i < entries.length; ++i) { | ||
var entry = entries[i] | |||
if (!entry.isIntersecting) { | |||
entry.target.classList.add(stuckClassname) | |||
} else { | |||
entry.target.classList.remove(stuckClassname) | |||
} | |||
} | } | ||
}, { threshold: | }, { threshold: 1 }).observe(target) | ||
} | } | ||
} | } | ||
83行目: | 99行目: | ||
.mouseleave(hideTooltip); | .mouseleave(hideTooltip); | ||
updateWidth(targetClassname); | updateWidth(targetClassname); | ||
observeRowStickyStuckState(); | observeRowStickyStuckState('row-sticky'); | ||
}); | }); |
2022年6月5日 (日) 10:59時点における最新版
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ var tooltip function updatePosition(e) { var obj = $(e.currentTarget) var offset = obj.offset() var y = offset.top + obj.outerHeight() var maxY = $(window).scrollTop() + $(window).height() - $('#tooltip').outerHeight() if (y > maxY) { y = offset.top - obj.outerHeight() } tooltip .css('left', Math.min( $(window).width() - tooltip.outerWidth(), Math.max( 0, Math.round(offset.left - 0.5 * (tooltip.outerWidth() - obj.outerWidth()))))) .css('top', y) } function unescapeHtml(html) { return html .replace(/"/g, '"') .replace(/&/g, '&') } function showTooltip(e) { var escaped = $(this).attr('data-tooltip') var html = unescapeHtml(escaped) tooltip .css('display', 'block') .html(html) updatePosition(e) $(this).mousemove(updatePosition) } function hideTooltip(e) { tooltip.css('display', '') $(this).off('mousemove') } function updateWidth(classname) { var targetSelectors = [ 'tr:first th:nth-child(1), tr:first td:nth-child(1)', 'tr:first th:nth-child(2), tr:first td:nth-child(2)', ] // Reset the max width of each column in each table. $("." + classname).each(function(index, elem) { $.each(targetSelectors, function(_, target) { $(elem).find(target).first().width('') }) }) // Find the max width of each column across all tables. var colWidths = new Array(targetSelectors.length).fill(0) $("." + classname).each(function(index, elem) { $.each(targetSelectors, function(idx, target) { colWidths[idx] = Math.max( colWidths[idx], Math.ceil($(elem).find(target).first().width())) }) }) // Set each column in each table to the max width of that column across all tables. $("." + classname).each(function(index, elem) { $.each(targetSelectors, function(idx, target) { $(elem).find(target).first().width(colWidths[idx]) }) }) } function observeRowStickyStuckState(classname) { var target = document.querySelector('.' + classname) if (target === null) return if (typeof IntersectionObserver === 'function') { var stuckClassname = classname + '--stuck' new IntersectionObserver(function(entries) { for (var i = 0; i < entries.length; ++i) { var entry = entries[i] if (!entry.isIntersecting) { entry.target.classList.add(stuckClassname) } else { entry.target.classList.remove(stuckClassname) } } }, { threshold: 1 }).observe(target) } } var targetClassname = 'damagetable' $(window).resize(updateWidth.bind(null, targetClassname)); $(function(){ tooltip = $("<div>", { id: 'tooltip' }).appendTo('body'); $('[data-tooltip]') .mouseenter(showTooltip) .mouseleave(hideTooltip); updateWidth(targetClassname); observeRowStickyStuckState('row-sticky'); });