[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: увеличить изображение при наведении мыши
Demjan
Как можно сделать увеличение изображения при наведении на него (или другой) объект? В инете квидел кучу примеров и ссылок на разные примеры работы скрипта, но описания как сделать не нашёл, как будто объяснение начинается с середины. Понятно что нужно скачать какие-то скрипты, подскажите, какой именно лучше использовать и где взять. И если можно, пожалуйста по порядку с того места где скачать.



Спустя 19 минут, 24 секунды (18.11.2010 - 20:44) Lenarfate написал(а):
читай про jquery. в нете полно уроков по нему

Спустя 7 минут, 46 секунд (18.11.2010 - 20:52) DmitryOpalev написал(а):
<a href="big.jpg" onclick="this.href='javascript:void(0);';">
<img
src="small.jpg" border="0" onClick="new ImageExpander(this, 'big.jpg');">
Подпись, чтобы показать, что ничего не уезжает
</a>

function ImageExpander(oThumb, sImgSrc)
{
// store thumbnail image and overwrite its onclick handler.
this.oThumb = oThumb;
this.oThumb.expander = this;
this.oThumb.onclick = function() { this.expander.expand(); }

// record original size
this.smallWidth = oThumb.offsetWidth;
this.smallHeight = oThumb.offsetHeight;

this.bExpand = true;
this.bTicks = false;

// self organized list
if ( !window.aImageExpanders )
{
window.aImageExpanders = new Array();
}
window.aImageExpanders.push(this);

// create the full sized image.
this.oImg = new Image();
this.oImg.expander = this;
this.oImg.onload = function(){this.expander.onload();}
this.oImg.src = sImgSrc;
}

ImageExpander.prototype.onload = function()
{
this.oDiv = document.createElement("div");
document.body.appendChild(this.oDiv);
this.oDiv.appendChild(this.oImg);
this.oDiv.style.position = "absolute";
this.oDiv.expander = this;
this.oDiv.onclick = function() {this.expander.toggle();};
this.oImg.title = "Click to reduce.";
this.bigWidth = this.oImg.width;
this.bigHeight = this.oImg.height;

if ( this.bExpand )
{
this.expand();
}
else
{
this.oDiv.style.visibility = "hidden";
this.oImg.style.visibility = "hidden";
}
}

ImageExpander.prototype.toggle = function()
{
this.bExpand = !this.bExpand;
if ( this.bExpand )
{
for ( var i in window.aImageExpanders )
if ( window.aImageExpanders[i] !== this )
window.aImageExpanders[i].reduce();
}
}

ImageExpander.prototype.expand = function()
{
// set direction of expansion.
this.bExpand = true;

// set all other images to reduce
for ( var i in window.aImageExpanders )
if ( window.aImageExpanders[i] !== this )
window.aImageExpanders[i].reduce();

// if not loaded, don't continue just yet
if ( !this.oDiv ) return;

// hide the thumbnail
this.oThumb.style.visibility = "hidden";

// calculate initial dimensions
this.x = this.oThumb.offsetLeft;
this.y = this.oThumb.offsetTop;
this.w = this.oThumb.clientWidth;
this.h = this.oThumb.clientHeight;

this.oDiv.style.left = this.x + "px";
this.oDiv.style.top = this.y + "px";
this.oImg.style.width = this.w + "px";
this.oImg.style.height = this.h + "px";
this.oDiv.style.visibility = "visible";
this.oImg.style.visibility = "visible";

// start the animation engine.
if ( !this.bTicks )
{
this.bTicks = true;
var pThis = this;
window.setTimeout(function(){pThis.tick();},25);
}
}

ImageExpander.prototype.reduce = function()
{
// set direction of expansion.
this.bExpand = false;
}
ImageExpander.prototype.tick = function()
{
// calculate screen dimensions
var cw = document.body.clientWidth;
var ch = document.body.clientHeight;
var cx = document.body.scrollLeft + cw / 2;
var cy = document.body.scrollTop + ch / 2;

// calculate target
var tw,th,tx,ty;
if ( this.bExpand )
{
tw = this.bigWidth;
th = this.bigHeight;
if ( tw > cw )
{
th *= cw / tw;
tw = cw;
}
if ( th > ch )
{
tw *= ch / th;
th = ch;
}
tx = cx - tw / 2;
ty = cy - th / 2;
}
else
{
tw = this.smallWidth;
th = this.smallHeight;
tx = this.oThumb.offsetLeft;
ty = this.oThumb.offsetTop;
}
// move 5% closer to target
var nHit = 0;
var fMove = function(n,tn)
{
var dn = tn - n;
if ( Math.abs(dn) < 3 )
{
nHit++;
return tn;
}
else
{
return n + dn / 10;
}
}

this.x = fMove(this.x, tx);
this.y = fMove(this.y, ty);
this.w = fMove(this.w, tw);
this.h = fMove(this.h, th);

this.oDiv.style.left = this.x + "px";
this.oDiv.style.top = this.y + "px";
this.oImg.style.width = this.w + "px";
this.oImg.style.height = this.h + "px";

// if reducing and size/position is a match, stop the tick
if ( !this.bExpand && (nHit == 4) )
{
this.oImg.style.visibility = "hidden";
this.oDiv.style.visibility = "hidden";
this.oThumb.style.visibility = "visible";

this.bTicks = false;
}

if ( this.bTicks )
{
var pThis = this;
window.setTimeout(function(){pThis.tick();},25);
}
}

Сам копировал, все работает... подключаешь файл в <head>
Нужны две картинки... их указываешь в html коде

Спустя 14 минут, 52 секунды (18.11.2010 - 21:06) DySprozin написал(а):
ни разу не понимаю: зачем нужно jquery для этого? (; подгружать несколько десятков Кб кода, который еще неизвестно как обернется с xss... бр... извращение (;

"локально":
<img src="img.jpg" width="100px" onmouseover="this.style.width='200px'">
"удаленно":
<img src="img1.jpg" width="100px" id="img1">
<img
src="img2.jpg" width="100px" onmouseover="document.getElementById('img1').style.width='200px'">


ну это, канеш, для извращенцев типа меня, которые ручками все любят делать (;

Спустя 2 минуты, 59 секунд (18.11.2010 - 21:09) DmitryOpalev написал(а):
Только тут оно у тебя сразу размер поменяет... в моем случае плавно rolleyes.gif
Я конечно тоже сам все пишу, и уважаю таких, но JS изучать пока времени нет biggrin.gif

Спустя 17 минут, 32 секунды (18.11.2010 - 21:27) DySprozin написал(а):
;;в моем случае плавно
ну... никто не мешает запрогать небольшую функцию, где по таймеру (напр. каждую мс) изображение будет увеличиваться на n пикселей (;

Спустя 9 минут, 24 секунды (18.11.2010 - 21:36) DmitryOpalev написал(а):
Согласен, но у меня это не получается rolleyes.gif
Тяжёлые у меня отношения с JS laugh.gif

Спустя 7 минут, 41 секунда (18.11.2010 - 21:44) job-nik написал(а):
а чем CSS не устраивает?

Спустя 1 минута, 58 секунд (18.11.2010 - 21:46) DmitryOpalev написал(а):
CSS опять же резко

Спустя 3 минуты, 46 секунд (18.11.2010 - 21:50) Demjan написал(а):
DmitryOpalev, не тот эффект вышел немного, картинка плавно, но не увеличивается а перемещается по экрану, DySprozin как отписал сработало, другой вопрос насколько плавно, но это тоже хороший вариант, как работает устраивает.

Спустя 48 секунд (18.11.2010 - 21:51) DmitryOpalev написал(а):
Надо две картинки, одна большая, другая маленькая smile.gif

Спустя 1 минута, 22 секунды (18.11.2010 - 21:52) Demjan написал(а):
Цитата (job-nik @ 18.11.2010 - 18:44)
а чем CSS не устраивает?

не известно как сделать, это единственное что не устраивает biggrin.gif

Спустя 4 минуты, 19 секунд (18.11.2010 - 21:56) DmitryOpalev написал(а):
C СSS надо псевдокласс (о, какое слово biggrin.gif ) :hover
Сейчас посмотрю у себя, что там такое...

Спустя 1 минута, 24 секунды (18.11.2010 - 21:58) Demjan написал(а):
Почему всё время две картинки, если переход должен быть плавным? промежуточный размер всё-равно растягиванием достигается, разве нит способа сделать из одной картинки увеличение, хоть на JavaScript, хоть на CSS ?? dry.gif

Спустя 3 минуты, 15 секунд (18.11.2010 - 22:01) Demjan написал(а):
Я вообще за CSS, JS отключать можно, значит наверняка кто-то отключает и эффекты исчезают, а если это сделать через CSS никто не отключит, и раз нарисовал то придётся смотеть всем, никуда не денутся biggrin.gif biggrin.gif biggrin.gif

Спустя 2 минуты, 6 секунд (18.11.2010 - 22:03) DmitryOpalev написал(а):
А, ну вообщем он увеличивает картинку (но у тебя она одна и та же, поэтому не заметно) и выставляет ее в центр экрана... картинка потом появляется в иходном размере
Цитата
Я вообще за CSS, JS отключать можно, значит наверняка кто-то отключает и эффекты исчезают, а если это сделать через CSS никто не отключит, и раз нарисовал то придётся смотреть всем, никуда не денутся  

Тут они тоже по-любому посмотрят, даже если отключат (только в новом окне)

Спустя 4 минуты, 25 секунд (18.11.2010 - 22:07) job-nik написал(а):
можно использовать transition для плавности

Спустя 2 минуты, 33 секунды (18.11.2010 - 22:10) Demjan написал(а):
Цитата (job-nik @ 18.11.2010 - 19:07)
можно использовать transition для плавности

а примером можно? с самым самым кратким пояснением

Спустя 20 минут, 38 секунд (18.11.2010 - 22:31) inpost написал(а):
Просто откройте уроки по jQuery, там много всяких полезностей, google не зря использует его... лучший фреймворк!

Спустя 16 минут, 56 секунд (18.11.2010 - 22:48) job-nik написал(а):
Цитата (inpost @ 18.11.2010 - 19:31)
google не зря использует его... лучший фреймворк!

не знаю не знаю.... может для целей гугла и лучший. зачем подгружать файл в пол мега, когда не используешь и десятую часть его возможностей ? это грузит сайт особо когда ресурсы на счету

Спустя 5 минут, 49 секунд (18.11.2010 - 22:53) inpost написал(а):
job-nik
1) Общаюсь сейчас с клиентом: "Не знаю как у Вас там, но у нас тут в Москве плохого интернета почти нету. Делай так, чтобы было круто и красиво!".
2) Весит mini-jquery 78кб. Грузится моментально при загрузки сайта, далее браузерами кешируется, жалко выделить лишние 78кб в начале?

Спустя 2 минуты, 27 секунд (18.11.2010 - 22:56) job-nik написал(а):
каждому своё smile.gif

Спустя 1 минута, 39 секунд (18.11.2010 - 22:58) Demjan написал(а):
Цитата (job-nik @ 18.11.2010 - 19:48)
Цитата (inpost @ 18.11.2010 - 19:31)
google не зря использует его... лучший фреймворк!

не знаю не знаю.... может для целей гугла и лучший. зачем подгружать файл в пол мега, когда не используешь и десятую часть его возможностей ? это грузит сайт особо когда ресурсы на счету

нашёл я как делается увеличение, но плавно проходит только в опере и ещё в сафари и хроме, код вот:

<html>
<head>


  <style type="text/css">
#block {
background: #333;
width: 100px;
color: #fff;
font-family: Segoe UI, Arial, Helvetica;
text-shadow: 0px 0px 3px #000;
padding: 30px;
-webkit-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
}
#block:hover {
width: 450px;
background: #486;
text-align: center;
}

#block2 {
width: 100px;
-webkit-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
}
#block2:hover {
width: 150px;
}
</style>


</head>
<body>

<div
style="width:300px; height:150px; text-align:center; background:#999999;">
<img
id="block2" src="img.jpg">
текст
</div>

<div
id="block">Наведи на меня курсор, и я растянусь, а также сменю цвет!</div>


</body>
</html>


Но изображение смещает другие объекты и к тому-же не плавно в мазиле и ие, как "можно использовать transition для плавности" и не смещать другие блоки?

Спустя 2 минуты, 24 секунды (18.11.2010 - 23:00) inpost написал(а):
Demjan
Четкие размеры. Маленький пример:
$('#second').hide();
<div id="first" style="height:500px"><div id="second"></div></div>
Просто уберётся центральный див, как бы исчезнет, при этом общий не сдвинет сайт, как как его высота фиксированная.
Или "position:absolute", вообще проблем не будет!

Спустя 5 минут, 22 секунды (18.11.2010 - 23:05) Demjan написал(а):
Цитата (inpost @ 18.11.2010 - 19:53)
job-nik
1) Общаюсь сейчас с клиентом: "Не знаю как у Вас там, но у нас тут в Москве плохого интернета почти нету. Делай так, чтобы было круто и красиво!".
2) Весит mini-jquery 78кб. Грузится моментально при загрузки сайта, далее браузерами кешируется, жалко выделить лишние 78кб в начале?

у человека - целевая аудитория с хорошим интернетом, сайт может рассчитываться на компьютеры с минимальными требованиями , и ,как ни странно, с отключенным ява-скрипт вообще, я если честно, вообще не знал что увеличивать можно через css, так бы и открыл тему там, ХОТЯ ТЕМЫ ПО CSS КАЖЕТСЯ НЕТУ? , надеюсь ктонибудь признается как сделать альтернативный вариант на CSS ph34r.gif

Спустя 2 минуты, 10 секунд (18.11.2010 - 23:07) Demjan написал(а):
Цитата (inpost @ 18.11.2010 - 20:00)
Четкие размеры.

Это чтоб не сомневаться- увеличился или нет biggrin.gif

Спустя 33 секунды (18.11.2010 - 23:08) inpost написал(а):
a:hover, но это будет моментально, а не плавно!

Спустя 8 минут, 6 секунд (18.11.2010 - 23:16) Demjan написал(а):
Цитата (inpost @ 18.11.2010 - 20:00)
Demjan

$('#second').hide();
<div id="first" style="height:500px"><div id="second"></div></div>

Или "position:absolute", вообще проблем не будет!

$('#second').hide(); - не понимаю, вроде не свойство, а "position:absolute" будет находится в непредсказуемом положении относительно текста при разной ширине экрана, на широких текст занимает меньшее место по высоте, рассчитывать на посетителей с определённой шириной экрана - много потерять из-за перекосов и смещений

Спустя 6 минут, 34 секунды (18.11.2010 - 23:23) Demjan написал(а):
$('#second').hide(); - понятно, программа, хотелось-бы без дополнительных программ по возможности, всего-лишь увеличить картинку надо

Спустя 4 минуты, 14 секунд (18.11.2010 - 23:27) inpost написал(а):
Demjan
js: getDocumentById('id').style.width = '50000px';

Спустя 2 минуты, 49 секунд (18.11.2010 - 23:30) job-nik написал(а):
Demjan
почитай специфику браузеров. работать не везде будет.

<!DOCTYPE html>
<html>
<head>
<title>
temp</title>
<style
type="text/css">
#block {
background: #333;
width: 100px;
color: #fff;
font-family: Segoe UI, Arial, Helvetica;
text-shadow: 0px 0px 3px #000;
padding: 30px;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}
#block:hover {
width: 450px;
background: #486;
text-align: center;
}

#block2 {
width: 100px;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}
#block2:hover {
width: 450px;
}
</style>
</head>
<body>

<div
style="width:300px; height:150px; text-align:center; background:#999999;">
<img
id="block2" src="img.jpg">
текст
</div>

<div
id="block">Наведи на меня курсор, и я растянусь, а также сменю цвет!</div>


</body>
</html>

где не работает JS таймер тебе в помощь

Спустя 3 дня, 23 часа, 52 минуты, 54 секунды (22.11.2010 - 23:23) Demjan написал(а):
Рыл, рыл и нарыл. Классный альтернативный способ изменить размер рисунка на css3, от js отступаюсь, основные браузеры поддерживают спецификацию, правда последние версии. Что сам узнал - оформил здесь : http://волшебный-брелок.рф/skript/instrukc...denii-css3.html, если где-то ошибаюсь - готов к критике. Удивлён очень что такого варианта никто не предложил. Всем огромное спасибо! wink.gif

Спустя 2 часа, 6 минут, 45 секунд (23.11.2010 - 01:29) inpost написал(а):
Demjan
CSS3? ты издеваешься? Его можно будет использовать годика через 3 как минимум... Даже у меня работать не будет, а я уж не говорю про обычных пользователей!

Спустя 10 часов, 10 минут, 52 секунды (23.11.2010 - 11:40) Demjan написал(а):
поче му даже? smile.gif на опере работает без проблем, фирефокс старый даже половину эффектов отображает, всего-лишь обновление браузеров, неужели народ обновлениями не пользуется?

Спустя 3 минуты, 18 секунд (23.11.2010 - 11:44) inpost написал(а):
Demjan
Нет, не пользуется! Ты и 40% не сосчитаешь, кто бы пользовался! У моего папы на работе используют ИЕ6, у меня стоит ИЕ7 специально для таких всяких разработок, с него и хожу по сайту.

Спустя 12 минут, 11 секунд (23.11.2010 - 11:56) Basili4 написал(а):
Цитата (job-nik @ 18.11.2010 - 23:48)
ий. зачем подгружать файл в пол мега,

Сколько 20 кб весит кпакованый JQ я для разработки использую развернутый он 70.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.