2011-01-25 3 views
2

Я пытаюсь создать функцию, которую я могу применить к div, и иметь этот div в центре его родителя, как по вертикали, так и по горизонтали.JQuery: программно центральные элементы

Я пытаюсь сделать функцию центрирования общих вещей, поэтому мне не нужно переписывать центрирующий кусок кода.

Что бы вы сделали, чтобы сделать центрирование проще всего, с помощью JQUERY.

$('p').hoverIntent(function() { 
    var myObject = $('#bThis') 
    var Ctop = $(this).offset().top + ($(this).height()/2) - (myObject.outerHeight()/2)  
    var Cleft = $(this).offset().left + ($(this).width()/2) - (myObject.outerWidth()/2)  

    if ($('#placeB').hasClass('place')) {  
     $(this).animate({color: "#999999", backgroundColor: "#f5f5f5"}, 400) 
     $('#bThis').css({'left':Cleft, 'top':Ctop}).fadeIn(200) 
    } 

}, function() { 
     $(this).stop().animate({color: "#333", backgroundColor: "#fff"}, 200) 
     $('#bThis').fadeOut(200) 
}); 

ответ

2

EDIT:

Смотрите рабочий пример here.

<div id="container"> 
    <div id="element"> 
     &nbsp; 
    </div> 
</div> 

<style> 
    #container{ 
    height:100px; 
    width:100px; 
    border:1px solid #000; 
    background:#EEE; 
    position:relative; 
    } 
    #element{ 
    height:50px; 
    width:50px; 
    border:1px solid #000; 
    background:#333; 
    position:relative; 
    } 
<style> 

<script> 
    function centerDiv(element, xPosFromCenter, yPosFromCenter){ 

    var xPos = parseInt(element.parent().css('width'))/2 -parseInt(element.css('width'))/2 - xPosFromCenter; 

    var yPos = parseInt(element.parent().css('height'))/2 -parseInt(element.css('height'))/2 - yPosFromCenter; 


    element.css({top: yPos, left:xPos}); 
    } 

    $().ready(function(){ 
    centerDiv($('#element'), 0, 0);   
    }); 
<script> 

Конец Edit

Ну, не делегируя работу "центра-ING" своей собственной функции сделать трюк?

function centerDiv(element, parent){ 
    var Ctop = $(element).offset().top + ($(element).height()/2) - (parent.outerHeight()/2) 
    var Cleft = $(element).offset().left + ($(element).width()/2) - (parent.outerWidth()/2) 

return {ctop: Ctop, cleft:Cleft}; 
} 

В функции вызова ..

. 
. 
. 
var obj = centerDiv($(this), $('#bThis')); 
$('#bThis').css({'left':obj.cleft, 'top':obj.ctop}).fadeIn(200); 
. 
. 
. 
+0

Отлично, это то, что я искал. Не пробовал, но похоже, что это сработает. Эй, если это не так уж сложно, как я смогу добавить смещение от центра? поэтому, если я хочу, чтобы элемент был -100px вверх от центра родителя, как бы я его сделал, чтобы я мог установить это, когда я вызываю функцию? поэтому он динамичен, и я могу настроить его для каждой ситуации, в которой я нуждаюсь? и есть ли учебник/учебный сайт jquery, который вы лично рекомендовали бы или нет? Еще раз спасибо. –

+0

@nick: Могу ли я предложить абсолютное позиционирование? При использовании абсолютного позиционирования в div с относительным позиционированием .. вы всегда можете указать 'top: X px'. Где X = (Высота контейнера/2) - 100 –

+0

@nick: см. Мое редактирование. прохождение 0, 0 даст вам точный центр. Что касается учебников jQuery, то в Интернете есть тонны контента, и было бы сложно сделать какие-либо рекомендации .. кроме как сказать «Пойдите туда и исследуйте то, что подходит вашим потребностям, а что нет». :) Удачи! –

Смежные вопросы