Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Фиксированная позиция (https://javascript.ru/forum/jquery/29955-fiksirovannaya-poziciya.html)

BoJlod9I 18.07.2012 19:30

Фиксированная позиция
 
Всем привет!
Помогите пожалуйста решить задачку
На сайте http://all2.mobi имеется слева вверху кнопка которая открывает меню(черный фон). Проблема состоит в том что кнопку необходимо фиксировать только в 1-ом див классе у которого белый фон. Не могу понять как может кто-то даст пример решения? Т.к. позиция щас фиксированая у кнопки при помощи ксс, кнопка пропадает при появлении меню =( думаю сами поймете

cmd 18.07.2012 20:03

Можно получить высоту верхнего меню
var menu_height = $('.top_all2_mobi').height();

и добавить к кнопке отступ сверху
var topSpacing = 40 + parseInt(menu_height);
 $('.top_all2_mobi').css('top', topSpacing + 'px');

Где 40 - отступ сверху по-умолчанию.

BoJlod9I 18.07.2012 20:45

Чет у меня не получилось вот добавил к той кнопке которая опускает меню.

$(document).ready(function () {
var menu_height = $('.top_all2_mobi').height();
var topSpacing = 40 + parseInt(menu_height);
 $('.top_all2_mobi').css('top', topSpacing + 'px');
	$('a.middle_button_top_menu').click(function () {
	$('.box_top_all2_mobi').slideDown('slow');
	return false;
    });
	$('a.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

BoJlod9I 18.07.2012 21:28

теме ап

cmd 19.07.2012 01:57

$(document).ready(function () {
 $('.top_all2_mobi').css('top', topSpacing + 'px');
	$('a.middle_button_top_menu').click(function () {
*!*
	$('.box_top_all2_mobi').slideDown('slow', function() {
		var menu_height = $('.top_all2_mobi').height(); // после слайддауна считать
		var topSpacing = 40 + parseInt(menu_height);
	});
*/!*
	return false;
    });
	$('a.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

BoJlod9I 19.07.2012 13:16

при таком вообще ничего не работает =*(

$(document).ready(function () {
 $('.top_all2_mobi').css('top', topSpacing + 'px');
	$('a.middle_button_top_menu').click(function () {
$('.box_top_all2_mobi').slideDown('slow', function() {
		var menu_height = $('.top_all2_mobi').height(); // после слайддауна считать
		var topSpacing = 40 + parseInt(menu_height);
	});
	return false;
    });
	$('a.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

BoJlod9I 19.07.2012 13:29

Цитата:

Сообщение от BoJlod9I (Сообщение 189902)
при таком вообще ничего не работает =*(

$(document).ready(function () {
 $('.top_all2_mobi').css('top', topSpacing + 'px');
	$('a.middle_button_top_menu').click(function () {
$('.box_top_all2_mobi').slideDown('slow', function() {
		var menu_height = $('.top_all2_mobi').height(); // после слайддауна считать
		var topSpacing = 40 + parseInt(menu_height);
	});
	return false;
    });
	$('a.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

А именно меню перестало вообще выпадать =(

Deff 19.07.2012 13:51

Цитата:

Сообщение от BoJlod9I
Всем привет!
Помогите пожалуйста решить задачку
На сайте http://all2.mobi имеется слева вверху кнопка которая открывает меню(черный фон). Проблема состоит в том что кнопку необходимо фиксировать только в 1-ом див классе у которого белый фон. Не могу понять как может кто-то даст пример решения? Т.к. позиция щас фиксированая у кнопки при помощи ксс, кнопка пропадает при появлении меню =( думаю сами поймете

Мне задача не ясна - сделайте пару скриншотов - изобразите так же эскиз - Как нужно - залить скриншоты можно сюда => http://uploads.ru/

BoJlod9I 19.07.2012 14:48

http://www.all2.mobi/
Смотри когда нажимаешь на кнопку вниз слева вверху тогда падает менюшка но мне нужно что-бы когда я перехожу на белый фон тоесть прокручиваю мне должна опять появлятся эта кнопка только на белом фоне и быть фиксированной при прокрутке беголого фона

BoJlod9I 19.07.2012 14:54

смотри открой сайт http://www.all2.mobi/ покрути страницу вверх вниз, у кнопки вверху слева которая на белом фоне позиция фиксированная но когда нажимаешь на кнопку у тебя выпадет меню черное и кнопка пропадает так как падает в top0

BoJlod9I 19.07.2012 15:00

Цитата:

Сообщение от BoJlod9I (Сообщение 189937)
смотри открой сайт http://www.all2.mobi/ покрути страницу вверх вниз, у кнопки вверху слева которая на белом фоне позиция фиксированная но когда нажимаешь на кнопку у тебя выпадет меню черное и кнопка пропадает так как падает в top0

Тоесть мне нужно что-бы вот эта кнопка прокрутивалась с фиксированной позицией только в div классе midlle_all2_mobi

zlodeeev 19.07.2012 15:03

Так она так и делает вроде. При прокручивание страницы со статьями - она на одном месте. При нажатии уходит вниз.

BoJlod9I 19.07.2012 15:04

мне нужно что-бы я видел кнопку

Вот мне нужно такое как нижний блок только у меня чет нихрена не получается
http://ruseller.com/lessons/les999/code.html

zlodeeev 19.07.2012 15:15

А ты её не видишь? Да она есть! И зафискирована на однои месте именно в div.midlle_all2_mobi, т.е. когда у тебя нажимают на кнопку эту - весь блок div.midlle_all2_mobi уходит вниз вместе с кнопкой.

zlodeeev 19.07.2012 15:17

Мне уже даже интересно стало, что именно тебя не устраивает. Всё красиво, всё работает.

BoJlod9I 19.07.2012 15:18

когда на эту кнопку нажимаешь у неё позиция становится bottom:0 а не top:0 для div класса midlle_all2_mobi. И при bottom:0 кнопку не видно

zlodeeev 19.07.2012 15:24

Ну если ты такое умудряешся сделать:

.box_fast_menu {
width: 100%;
margin: 0px;
padding: 0px;
height: 35px;
z-index: 1; <<<<
left: 0;
position: fixed;
z-index: 9999999; <<<<
}


То я не знаю, что тебе ответить... Там нет ни у одного элемента свойств ни bottom, ни top вообще.. Может ты не ту ссылку кинул

Deff 19.07.2012 15:55

BoJlod9I,
Тут есть подобное = пост 11 http://javascript.ru/forum/misc/2892...tml#post181794

BoJlod9I 19.07.2012 18:52

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

Пример http://all2.mobi

Вот JS которые использую для этой кнопки

JS который привязывает к блоку кнопку
<script type="text/javascript">
function Scroll_Tst(){
  var WinTop = $(window).scrollTop();
  var WinBottom = WinTop+$(window).height();

    $(".middle_all2_mobi").each(function (j) {
	var a=$(this);
	var Top = a.position().top;
	var Bottom = Top+a.height();

	var b = a.find("a.middle_button_top_menu");
	var b_Heig = b.outerHeight() + 20; //20 - отступ от низа

	if(Top > WinTop||Bottom < WinTop||Top > WinBottom) {	// container либо вне поля видимости, либо не
	$(this).attr('class','middle_all2_mobi'); return true;}	//влотную к верху экрана;

	if(Bottom > WinTop && Top < WinTop ){	//container влотную к верху экрана;
	if(Bottom - b_Heig > WinTop){$(this).attr('class','middle_all2_mobi top-visible');
	} else {$(this).attr('class','middle_all2_mobi top-visible-fix')}
	return true;}

    });
}

 var TimScroll;
 var Ready = true;

$(window).scroll(function(){
   if(Ready){Ready = false; clearTimeout(TimScroll);

     Scroll_Tst()

     TimScroll=setTimeout("Ready = true",10);
   } 
});
</script>



А вот JS который показывает меню через кнопку
$(document).ready(function () {
	$('.middle_button_top_menu').click(function () {
	$('.box_top_all2_mobi').slideDown('slow');
	return false;
    });
	$('.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

Deff 19.07.2012 19:39

BoJlod9I,
Добавьте (Хотя про fixed - Вы вродь уже догадались
<style type="text/css" media="all">
.top-visible .middle_button_top_menu {
 display:block!important;
 margin-top:40px!important;
 position: fixed!important;
}
</style>

BoJlod9I 19.07.2012 19:47

Кнопка должна ездить даже после того как выехала меню
А она не ездит даже так
<style type="text/css" media="all">
.top-visible .middle_button_top_menu {
 display:block!important;
 margin-top:40px!important;
 position: fixed!important;
}
</style>


Если честно не могу понять в чем причина =(

Deff 19.07.2012 19:53

BoJlod9I,
Дык это дополнение было к установленому Вами в посте 19 - А не просто так к исходнику

zlodeeev 19.07.2012 19:54

У меня вообще всё поплыло к херам. Чтобы ездила независимо от состояния меню(открыто/закрыто) - вынеси кнопку в начало своего кода, чтобы он не был чилдреном никакого дива.

BoJlod9I 19.07.2012 19:56

так я и заменил просто

BoJlod9I 19.07.2012 19:56

она всеравно не пашет =(

BoJlod9I 19.07.2012 19:57

после того как меню выехала кнопка не крутится =(

Deff 19.07.2012 20:02

BoJlod9I,
1. Выньте и разверните скрипт и css (Для данной задачи) - на странице - тады править будет удобнее = лазить каждый раз в дебагер - не АЙС!

//Зы: - Не стучите в личку - я смотрю новые сообщения!

BoJlod9I 19.07.2012 20:09

ВОТ ВЕРСТКА

<?php include('fast_menu.tpl.php'); ?>
<div class="box_top_all2_mobi">
<div class="top_all2_mobi">
<table class="top_all2_mobi_table">
    <tr>
		<td rowspan="2" class="top_all2_mobi_table_planet">
        	<a class="top_all2_mobi_table_button_foot"></a>
        </td>
        <td align="right" class="top_all2_mobi_table_td_top_left">
            <a href="" class="top_all2_mobi_table_button_info">О сайте</a>
            <a href="" class="top_all2_mobi_table_button_news">Новости</a>
        </td>
        <td align="right" class="top_all2_mobi_table_td_top_right">
            <a href="http://www.all2.mobi/guestbook" class="top_all2_mobi_table_button_review">Отзывы</a>
            <a href="http://www.all2.mobi/forum" class="top_all2_mobi_table_button_forum">Форум</a> 
        </td>
	</tr>
    <tr> 
        <td colspan="2" align="right" class="top_all2_mobi_table_td_foot">
        <a href="" class="top_all2_mobi_table_button_catalog">Каталог телефонов</a>
        </td>

    </tr>
</table>
 САМА МЕНЮШКА НА ЧЕРНОМ ФОНЕ
<script type="text/javascript">
//Функция которая фиксирует контент
function Scroll_Tst(){
  var WinTop = $(window).scrollTop();
  var WinBottom = WinTop+$(window).height();

    $(".middle_all2_mobi").each(function (j) {
	var a=$(this);
	var Top = a.position().top;
	var Bottom = Top+a.height();

	var b = a.find("a.middle_button_top_menu");
	var b_Heig = b.outerHeight() + 20; //20 - отступ от низа

	if(Top > WinTop||Bottom < WinTop||Top > WinBottom) {	// container либо вне поля видимости, либо не
	$(this).attr('class','middle_all2_mobi'); return true;}	//влотную к верху экрана;

	if(Bottom > WinTop && Top < WinTop ){	//container влотную к верху экрана;
	if(Bottom - b_Heig > WinTop){$(this).attr('class','middle_all2_mobi top-visible');
	} else {$(this).attr('class','middle_all2_mobi top-visible-fix')}
	return true;}

    });
}

 var TimScroll;
 var Ready = true;

$(window).scroll(function(){
   if(Ready){Ready = false; clearTimeout(TimScroll);

     Scroll_Tst()

     TimScroll=setTimeout("Ready = true",10);
   } 
});

//Функция которая позволяет поднять и опустить меню
$(document).ready(function () {
	$('.middle_button_top_menu').click(function () {
	$('.box_top_all2_mobi').slideDown('slow');
	return false;
    });
	$('.middle_button_top_menu').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});

$(document).ready(function () {
	$('a.top_all2_mobi_table_button_foot').click(function () {
	$('.box_top_all2_mobi').slideUp('faste');
	return false;
    });
	$('a.top_all2_mobi_table_button_foot').click(function(){ 
        if($.browser.safari){
            bodyelem = $("body")
        } else{
            if($.browser.opera){
                bodyelem = $("html")
            } else{
                bodyelem = $("html,body")
            }
        }
        bodyelem.animate({scrollTop: 0});
        return false;
    });
});
</script>
</div>
</div>
<div class="middle_all2_mobi"><!-- Блок в которой должна быть фиксированная кнопка -->
    <table class="middle_all2_mobi_table">
        <tr>
            <td class="middle_all2_mobi_table_planet"></td>
            <td class="middle_all2_mobi_table_scratches"></td>
        </tr>
    </table>
    <a href="" class="middle_button_top_menu"></a> <!-- Сама кнопка которая должна держатся -->
    <div class="middle_all2_mobi_box_content">
        	
    	<?php print render($page['content']); ?>
    </div>
</div>

<?php include('footer.tpl.php'); ?>



ВОТ САМ CSS
/*Начало контента сайта*/
.middle_all2_mobi{
	min-height:100%;
	max-width:100%;
	background:url('../images/top2.png');
	margin:0px;
	padding-top:0px;
	position:relative;
}
.middle_all2_mobi_table{
	width:1003px;
	height:540px;
	position:absolute;
	left:50%;
	margin-left:-502px;
}
.middle_all2_mobi_table_planet{
	width:455px;
	height:300px;
	background:url('../images/top_sait_planet.png');
	background-repeat:no-repeat;
	background-position:top left;
}
.middle_all2_mobi_table_scratches{
	width:508px;
	height:540px;
	background:url('../images/content_all2_mobi_scratches.png');
	background-repeat:no-repeat;
	background-position:top left;
	margin-left:-100px;
}
.middle_all2_mobi_box_content{
	background-color:#aaa;
	padding-top:0px;
	margin: 100px 0px 0px 104px;
}
.middle_button_top_menu{
	display:inline;
	margin-top:auto;
	width:100px;
	height:100px;
	background:url('../images/button_foot.png');
	background-repeat:no-repeat;
	background-position:0px 0px;
	position:static;
	float:left;
	transition-property:top;
	-webkit-transition-property:top;
	-moz-transition-property:top;
	-o-transition-property:top;
	-ms-transition-property:top;
	transition-duration: 0.6s;
	-webkit-transition-duration: 0.6s;
	-moz-transition-duration: 0.6s;
	-o-transition-duration: 0.6s;
	-ms-transition-duration: 0.6s; /* IE9+ */
}
.middle_button_top_menu:hover{
	background:url('../images/button_foot.png');
	background-position:0px -101px;
}
.top-visible .middle_button_top_menu {
	 display:block!important;
	 margin-top:40px!important;
	 position:fixed!important;
}
.top-visible-fix{
	display:inline;
	vertical-align:bottom;
}
.top-visible-fix .middle_button_top_menu{
	margin-top:auto;
	position:absolute;
	bottom:20px;
	transition-property:none;
	-webkit-transition-property:none;
	-moz-transition-property:none;
	-o-transition-property:none;
	-ms-transition-property:none;
}
.top-visible-fix .middle_button_top_menu{
	margin-top:auto;
	position:absolute;
	bottom:20px;
	transition-property:none;
	-webkit-transition-property:none;
	-moz-transition-property:none;
	-o-transition-property:none;
	-ms-transition-property:none;
}

BoJlod9I 19.07.2012 20:22

Deff можешь написать мне в асю?

BoJlod9I 19.07.2012 20:24

нифига не понял покажи пожалуйста готовый JS

Deff 19.07.2012 20:37

BoJlod9I,
Дафай завтра - чот уже не соображаю (походу ерунду сказал)
Но функция после клика не запускается

BoJlod9I 19.07.2012 20:44

Так может мне 2 функции нужно объеденить?

Deff 20.07.2012 11:41

BoJlod9I,
Вот эти две библиотеки имхо лишние
<script type="text/javascript" src="http://www.all2.mobi/misc/jquery.js?v=1.4.4"></script>
<script type="text/javascript" src="http://www.all2.mobi/misc/jquery.once.js?v=1.2"></script>

Возможно и еще есть дублирование


Часовой пояс GMT +3, время: 04:11.