Это не должно работать и в других браузерах, так как вы не указали смещение прокрутки страницы. Вы также должны сохранить элемент в переменную, чтобы jQuery четыре раза не обходил DOM, и вы также можете объединить объявления css в одно. Попробуйте это:
var el = $(id);
el.css({
top: $(window).scrollTop() + winH / 2 - el.height() / 2,
left: winW / 2 - el.width() / 2
});
Другой метод - использовать высоту документа вместо высоты окна. Высота окна - это высота страницы, видимой в данный момент на экране, а высота документа - высота всей страницы. Используя высоту документа:
var el = $(id);
el.css({
top: $(document).height() / 2 - el.height() / 2,
left: winW / 2 - el.width() / 2
});