Вывод изо в видимой области экрана
Реализовано появление увеличенной копии изо при наведении на него курсора мыши.
Стоит задача: показывать эту копию только в видимой области экрана. Логика такая: берём текущие координаты курсора (e.pageX и e.pageY), прибавляем к ним значение ширины и высоты нового блока соответственно и делаем выводы: Если новое значение меньше ширины (высоты) экрана выводим новый блок в позиции курсора; Если больше - получаем координаты позиции курсора минус ширина (высота) нового блока и смотрим: Если новая координата больше 0 - выводим в ней новый блок; Если меньше - делаем её равной 0... На практике реализовал так: left_coor = (e.pageX+$('#preview').width())>$(window).width() ? e.pageX - $('#preview').width() : e.pageX; top_coor = (e.pageY+$('#preview').height())>$(window).height( ) ? e.pageY - $('#preview').height() : e.pageY; left_coor = left_coor < 0 ? 0 : left_coor; top_coor = top_coor < 0 ? 0 : top_coor; Для ширины всё работает изумительно, а вот с высотой не так... При наведении курсор мыши дрожит и ничего не выводится... порой выводится, только новое окно уходит как за верхнюю, так и за нижнюю границы экрана... Подскажите, где туплю??? |
Цитата:
|
Вот полный код функции выводящей увеличенную копию:
this.imagePreview = function(){
$("a.preview").hover(function(e){
this.t = this.title;
this.title = "";
var c = (this.t != "") ? "<br/>" + this.t : "";
$("body").append("<p id='preview'><img src='"+ this.id +"' />"+ c +"</p>");
left_coor = (e.pageX+$('#preview').width())>$(window).width() ? e.pageX - $('#preview').width() : e.pageX;
top_coor = (e.pageY+$('#preview').height())>$(window).height() ? e.pageY - $('#preview').height() : e.pageY;
left_coor = left_coor < 0 ? 0 : left_coor;
top_coor = top_coor < 0 ? 0 : top_coor;
$("#preview")
.css("top",top_coor + "px")
.css("left",left_coor + "px")
.fadeIn("fast");
},
function(){
this.title = this.t;
$("#preview").remove();
});
$("a.preview").mousemove(function(e){
left_coor = (e.pageX+$('#preview').width())>$(window).width() ? e.pageX - $('#preview').width() : e.pageX;
top_coor = (e.pageY+$('#preview').height())>$(window).height() ? e.pageY - $('#preview').height() : e.pageY;
left_coor = left_coor < 0 ? 0 : left_coor;
top_coor = top_coor < 0 ? 0 : top_coor;
$("#preview")
.css("top",top_coor + "px")
.css("left",left_coor + "px");
});
};
|
Цитата:
|
центрирование в видимой области
:write: скролим кликаем по картинке и она всегда в центре ...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
body{
height: 1000px;
}
</style>
<script>
jQuery.fn.center = function()
{
var w = $(window);
this.css("position","absolute");
this.css("top",(w.height()-this.height())/2+w.scrollTop() + "px");
this.css("left",(w.width()-this.width())/2+w.scrollLeft() + "px");
return this;
}
function creatOverlay(){
$(this).center()
}
$(document).on({"click": creatOverlay}, "img")
</script>
</head>
<body>
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" alt="" >
</body>
</html>
|
ksa,
вам скинуть ссылку на ресурс, чтоб можно было посмотреть как "троит"??? Если нет, то я не понимаю, что такое "тестовый пример". |
Цитата:
|
рони,
мне картинка нужна не в центре. Нужно чтоб курсор всегда её касался. Но всё равно спасибо, сейчас разберу ваш код, - может шо полезное для своей задачи и усвою. |
Может это тестовый пример?
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Гостиницы мира</title>
<script type="text/javascript" src="../js/jquery-1.9.1.min.js"> </script>
<script type="text/javascript" src="js/big_img.js"> </script>
<script language='javascript'>
$(document).ready(function(){
imagePreview();
});
</script>
</head>
<body>
<a href='javascript: void(null)' id="../mini/creative-advert-print-01.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-01.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-02.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-02.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-04.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-04.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-05.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-05.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-07.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-07.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-09.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-09.jpg&max=50" /></a>
<a href='javascript: void(null)' id="../mini/creative-advert-print-12.jpg" class="preview"><img src="../php_functions/resizer.php?pic=../mini/creative-advert-print-12.jpg&max=50" /></a>
</body>
</html>
|
Цитата:
Но он не полный :( Цитата:
Если это запустить тут или скопипастить себе - ничего не грузанется... |
Цитата:
|
Тогда пусть так будет!
<head>
<meta charset="utf-8">
<title>Гостиницы мира</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>
<script language='javascript'>
this.imagePreview = function(){
$("a.preview").hover(function(e){
this.t = this.title;
this.title = "";
var c = (this.t != "") ? "<br/>" + this.t : "";
$("body").append("<p id='preview'><img src='"+ this.id +"' />"+ c +"</p>");
left_coor = (e.pageX+$('#preview').width())>$(window).width() ? e.pageX - $('#preview').width() : e.pageX;
top_coor = (e.pageY+$('#preview').height())>$(window).height() ? e.pageY - $('#preview').height() : e.pageY;
left_coor = left_coor < 0 ? 0 : left_coor;
top_coor = top_coor < 0 ? 0 : top_coor;
$("#preview")
.css("top",top_coor + "px")
.css("left",left_coor + "px")
.fadeIn("fast");
},
function(e){
this.title = this.t;
$("#preview").remove();
});
$("a.preview").mousemove(function(){
left_coor = (e.pageX+$('#preview').width())>$(window).width() ? e.pageX - $('#preview').width() : e.pageX;
top_coor = (e.pageY+$('#preview').height())>$(window).height() ? e.pageY - $('#preview').height() : e.pageY;
left_coor = left_coor < 0 ? 0 : left_coor;
top_coor = top_coor < 0 ? 0 : top_coor;
$("#preview")
.css("top",top_coor + "px")
.css("left",left_coor + "px");
});
};
$(document).ready(function(){
imagePreview();
});
</script>
<style>
#preview{
position:absolute;
border:1px solid #ccc;
background:#FFF;
padding:5px;
display:none;
color:#03F;
}
.block{
min-height: 400px;
}
</style>
</head>
<body>
<div class='block'>gbgfgfb</div>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<div class='block'>gbgfgfb</div>
</body>
|
Цитата:
|
Совсем забыл <style> дописать. Я поправил.
|
http://code.jquery.com/jquery-latest.js
Тоже вставил на место. |
Теперь пример точно рабочий. Можно скопипастить себе и посмотреть (как отсюда лелать шоб запускался - я не обучен).
Только для полной наглядности блок с изо нужно бы по странице поскролить. Если надо - я внесу необходимые изменения. Вы только скажите. |
Цитата:
http://javascript.ru/formatting |
Всё запускается отсюда и скролится. Теперь поможете?
|
Цитата:
Вот только рабочий день уже подошел к завершению... Но думаю желающих помочь, имея тестовый пример, прибавится. :) |
Будем надеяться..! :agree:
|
:dance: лёгким движением руки брюки превращаются ... или за курсором но в пределах видимой части экрана...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
body{
height: 2000px;
width: 2000px;
padding: 0px;
margin: 0px;
}
</style>
<script>
jQuery.fn.center = function(event)
{
var w = $(window),
top = (w.height()-this.height())+w.scrollTop(),
left = (w.width()-this.width())+w.scrollLeft();
this.css("position","absolute");
this.css("top",top > event.pageY ? event.pageY : top + "px");
this.css("left", left > event.pageX ? event.pageX : left+"px");
return this;
}
function creatOverlay(event){
$("img").center(event)
}
$(document).on({"mousemove": creatOverlay},"body")
</script>
</head>
<body>
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" alt="" >
</body>
</html>
|
в пределах видимости
:) шортики...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
body{
height: 2000px;
width: 2000px;
padding: 0px;
margin: 0px;
}
#preview{
position:absolute;
border:1px solid #ccc;
background:#FFF;
padding:5px;
color:#03F;
z-index: 100;
display: none;
}
.block{
min-height: 400px;
position: relative;
top: 300px;
left: 350px;
}
</style>
<script>
jQuery.fn.center = function(event)
{
var w = $(window),
top = (w.height()-this.outerHeight(true))+w.scrollTop() -(event.pageY+22),
left = (w.width()-this.outerWidth(true))+w.scrollLeft() -(event.pageX+7);
this.css("position", "absolute");
this.css("top", top > 0? event.pageY+22: (event.pageY-this.outerHeight(true)) + "px");
this.css("left", left> 0? event.pageX+7: (event.pageX-this.outerWidth(true))+"px");
return this;
}
$(document).ready(function ()
{
$(".block img").mousemove(function (event)
{
$("#preview").center(event);
}
)
$(".block img").mouseenter(function ()
{
$("#preview").attr({'src': $(this).parent().data('src')})
.stop(true, true).fadeIn()
}
)
$(".block img").mouseleave(function ()
{
$("#preview").stop(true, true).fadeOut();
}
)
}
)
</script>
</head>
<body> <img id="preview" >
<div class='block'>
<a href='javascript: void(null)' data-src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/img/ws_1.png" class="preview"><img src="http://javascript.ru/img/ws_1.png" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/img/ws_1.png" class="preview"><img src="http://javascript.ru/img/ws_1.png" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/img/ws_1.png" class="preview"><img src="http://javascript.ru/img/ws_1.png" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' data-src="http://javascript.ru/img/ws_1.png" class="preview"><img src="http://javascript.ru/img/ws_1.png" width='50' height='50' /></a>
</div>
</body>
</html>
|
Шож, никто не помог... но решение я всё же нашёл. Может пригодится кому, выложу. Вот рабочий пример:
<head>
<meta charset="utf-8">
<title>Гостиницы мира</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>
<script language='javascript'>
this.imagePreview = function(){
$("a.preview").hover(function(e){
var mouseTop = e.pageY - $(window).scrollTop();
var mouseLeft = e.pageX - $(window).scrollLeft();
this.t = this.title;
this.title = "";
var c = (this.t != "") ? "<br/>" + this.t : "";
$("body").append("<div id='preview'><img src='"+ this.id +"' />"+ c +"</div>");
var imgTop = e.pageY;
imgTop = (imgTop + $('#preview').height()) > ($(window).scrollTop() + $(window).height()) ? ($(window).scrollTop() + $(window).height()) - $('#preview').height() - 20 : imgTop;
var imgLeft = e.pageX;
imgLeft = (imgLeft + $('#preview').width()) > ($(window).width() + $(window).scrollLeft()) ? ($(window).scrollLeft() + $(window).width()) - $('#preview').width() - 20 : imgLeft;
$("#preview").css({top: imgTop + "px",
left: imgLeft + "px"}).fadeIn("fast");
},
function(){
this.title = this.t;
$("#preview").remove();
});
$("a.preview").mousemove(function(e){
var mouseTop = e.pageY - $(window).scrollTop();
var mouseLeft = e.pageX - $(window).scrollLeft();
var imgTop = e.pageY;
imgTop = (imgTop + $('#preview').height()) > ($(window).scrollTop() + $(window).height()) ? ($(window).scrollTop() + $(window).height()) - $('#preview').height() - 20 : imgTop;
var imgLeft = e.pageX;
imgLeft = (imgLeft + $('#preview').width()) > ($(window).width() + $(window).scrollLeft()) ? ($(window).scrollLeft() + $(window).width()) - $('#preview').width() - 20 : imgLeft;
$("#preview").css({top: imgTop + "px",
left: imgLeft + "px"});
});
};
$(document).ready(function(){
imagePreview();
});
</script>
<style>
#preview{
position:absolute;
border:1px solid #ccc;
background:#FFF;
padding:5px;
display:none;
color:#03F;
}
.block{
min-height: 400px;
}
</style>
</head>
<body>
<div class='block'>gbgfgfb</div>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<a href='javascript: void(null)' id="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" class="preview"><img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width='50' height='50' /></a>
<div class='block'>gbgfgfb</div>
</body>
|
Dozentos,
Цитата:
|
Цитата:
|
А можно про "шортики поподробнее"???
|
Цитата:
|
Простите, невнимателен. Не заметил сразу код, думал это мой вчерашний.
Сейчас разберу. Кстати, не понимаю, почему мой тестовый пример здесь работает плохо??? На реальной странице всё нормально. Вот, можете посмотреть здесь |
Цитата:
|
Хм... моей "сноровки" на это не хватило...
В любом случае можно считать тему закрытой. Есть два варианта решения поставленной задачи: мой и "шортики". Можно использовать любой (хотя "шортики", конечно, попроще и постабильнее). Всем большое спасибо! |
| Часовой пояс GMT +3, время: 04:45. |