Рони, взяв за основу ваш вариант, поигравшись с тригерами и событиями, получился работающий вариант.
Попробовать можно на сайте, ссыдочка в теме есть.
1 - прошу глянуть на код, нет ли в нем явных косяков?
$('.view-tury.view-display-id-page_1 .views-col').on('mouseenter', function(e) {
var tempThis = $(this);
TimerInterval = setTimeout(function() {
$("#main").append('<div id="follower">' + $(tempThis).html() + '</div>');
tempTriger = 1
}, 500)
}).on('mousemove', function(e) {
if (tempTriger == 1) {
$('#follower').show();
tempTriger = 2
}
if (tempTriger == 2) {
var tempLeft = e.pageX + 325;
if ( $(window).width() > tempLeft ) {
$('#follower').offset({
left: e.pageX + 20,
top: e.pageY + 30
});
} else {
$('#follower').offset({
left: e.pageX - 300,
top: e.pageY + 30
});
}
}
}).on('mouseleave', function(e) {
clearTimeout(TimerInterval)
$("#follower").remove();
tempTriger = 0
});
2 - проблема с передергиваниями скрола и позицией блока решилась, но при смене события на mousemove, если в это время курсор не двигался, то блок не отображается по таймеру, пока не шевельнешь мышкой.
если перетащить включение показа блока в mouseenter - тогда будет прыгание позиции.
3 - в связи с пунктом 2 вопрос: можно ли как-то принудильтельно вызвать событие mousemove, например сдвинуть курсор мышки или еще каким-то образом
в этом месте
TimerInterval = setTimeout(function() {
$("#main").append('<div id="follower">' + $(tempThis).html() + '</div>');
tempTriger = 1
чтобы гарантированно произошел показ блока по таймеру.