Вот некоторые ошибки / исправления.
GetBoundingClientRect () - это функция JS, а не jQuery, поэтому она должна использоваться с элементом javascript, а не с селектором jquery. Использование средства доступа [0] в селекторе jquery (если вы хотите его получить) даст вам элемент JS.
Также заметил, что вы пытались выбрать тег "html" по id, но у него нет идентификатора. Изменил его на getElementsByTagName.
var offsetYOrig = $('.box-1')[0].getBoundingClientRect().bottom;
// or, without jQuery:
// var offsetYOrig = document.getElementsByClassName('box-1')[0].getBoundingClientRect().bottom;
var html = document.getElementsByTagName("html")[0];
var style = window.getComputedStyle(html);
var remValue = style.getPropertyValue('font-size');
Редактировать: Что касается вашего редактирования, если вам нужно вызвать javascript для пересчета при изменении размера окна, вы можете попробовать что-то вроде этого. Я не уверен, что он полностью достигает того, чего вы хотите (я не совсем понимаю ваши требования к «привязке», но это, по крайней мере, вызовет код снова. Возможно, вам все равно придется редактировать код в snapFunction, если это не так). не соответствует вашим потребностям.
Я добавил несколько журналов консоли, которые могли бы помочь вам проверить свою математику, поскольку она показалась мне немного проблематичной, хотя я не был уверен, как это исправить, потому что я не понимаю вашу цель.
function snapFunction ()
{
var box = document.querySelector('.box-1');
var rect = box.getBoundingClientRect();
var bottomOrig = rect.bottom;
var htmlRoot = document.querySelector('html');
var style = getComputedStyle(htmlRoot);
var remValue = style.getPropertyValue('font-size');
var bottomNew = Math.floor(bottomOrig / remValue) * remValue;
var fix = bottomOrig - bottomNew;
// open your browser console and check the value of these to check your math and what values you're getting
console.log("bottomOrig: " + bottomOrig )
console.log("remValue: " + remValue)
console.log("bottomNew: " + bottomNew )
// note: no quotes around your variable name fix here
$('.container-2').css("margin-bottom", fix + "px");
};
// call on load
(function() {
snapFunction();
})();
// call on resize
$( window ).resize(function() {
snapFunction();
});
Я заметил, что значение вашей переменной bottomNew было записано как «NaN» (не число), поэтому я думаю, что там что-то идет не так.
Я думаю, что вы получаете размер шрифта, например, "36px" вместо просто "36". Может быть, вы могли бы попробовать
var remValue = parseInt(style.getPropertyValue('font-size'), 10);
Число 10 в этой функции parseInt просто указывает, что мы хотим использовать числа с основанием 10.