Я работаю на сайте с плагином jq.imghover1.1.js для jquery.
Плагин прекрасно работает почти в любых обстоятельствах, но я сделал позицию: абсолютную для div, который содержит изображения, которые будут затронуты плагином, и теперь, когда плагин исчезает при наведении изображения, они делают это далеко справа от оригинальная кнопка.
Код:
<html>
<head>
<style type="text/css">
.container {
width: 1004px;
поле: 0 авто;
дисплей: таблица;}
.top {
высота: 140 пикселей;
положение: абсолютное;
верх: 0px;
слева: 0px;}
<script type="text/javascript"
$(document).ready(function(){
$('img.on').imghover({suffix: '_b',fade: true,fadeSpeed: 400});
});
</script>
</head>
<body>
<div class="container top">
<div class="mainmenu">
<img alt="acerca de" height="53" src="images/mm-acercade.jpg" width="117" class="on" />
</div>
</div>
</body>
</html>
JS:
/**
* jquery.popupt
* (c) 2008 Semooh (http://semooh.jp/)
*
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
**/
(function($){
$.fn.extend({
imghover: function(opt){
return this.each(function() {
opt = $.extend({
prefix: '',
suffix: '_o',
src: '',
btnOnly: true,
fade: false,
fadeSpeed: 500
}, opt || {});
var node = $(this);
if(!node.is('img')&&!node.is(':image')){
var sel = 'img,:image';
if (opt.btnOnly) sel = 'a '+sel;
node.find(sel).imghover(opt);
return;
}
var orgImg = node.attr('src');
var hoverImg;
if(opt.src){
hoverImg = opt.src;
}else{
hoverImg = orgImg;
if(opt.prefix){
var pos = hoverImg.lastIndexOf('/');
if(pos>0){
hoverImg = hoverImg.substr(0,pos-1)+opt.prefix+hoverImg.substr(pos-1);
}else{
hoverImg = opt.prefix+hoverImg;
}
}
if(opt.suffix){
var pos = hoverImg.lastIndexOf('.');
if(pos>0){
hoverImg = hoverImg.substr(0,pos)+opt.suffix+hoverImg.substr(pos);
}else{
hoverImg = hoverImg+opt.suffix;
}
}
}
if(opt.fade){
var offset = node.offset();
var hover = node.clone(true);
hover.attr('src', hoverImg);
hover.css({
position: 'absolute',
left: offset.left,
top: offset.top,
zIndex: 1000
}).hide().insertAfter(node);
node.mouseover(
function(){
var offset=node.offset();
hover.css({left: offset.left, top: offset.top});
hover.fadeIn(opt.fadeSpeed);
node.fadeOut(opt.fadeSpeed,function(){node.show()});
}
);
hover.mouseout(
function(){
node.fadeIn(opt.fadeSpeed);
hover.fadeOut(opt.fadeSpeed);
}
);
}else{
node.hover(
function(){node.attr('src', hoverImg)},
function(){node.attr('src', orgImg)}
);
}
});
}
});
})(jQuery);
Вся проблема в том, что при наведении курсора на кнопку imghover парит изображение поверх исходного, вычисляя расстояние слева от экрана, чтобы расположить изображение при наведении курсора. Когда вы делаете position: absolute div как контейнер для изображений, на которые будет влиять imghover, вычисления для позиционирования зависшего изображения останутся прежними, если вы не добавите left: Xpx, что помогает imghover вычислять левое расстояние, но, как вы могли видеть, у контейнера нет левого края: Xpx объявлен, так что imghover принимает как должное позицию слева от экрана, затем добавляет ее к объявлению, и я получаю изображение на 300px далеко вправо, чем нужно.
Любая идея будет отличной!