Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Переключатель табов в самих вкладках (https://javascript.ru/forum/dom-window/67121-pereklyuchatel-tabov-v-samikh-vkladkakh.html)

Igorsrt 29.01.2017 12:33

Переключатель табов в самих вкладках
 
Здравствуйте!
Пытаюсь немного переделать код, полученный на этом форуме, для того что бы переключатели табов находились в самих вкладках этого таба (что бы ниже можно было добавлять еще информацию)...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<style type='text/css'>
.box {
    display: none; 
    padding: 0px !important;
    background-color: #FFF;
}
.box.visible {
    display: block;
    padding: 10px;
}
ul.tabs {
    height: 27px;
    background: #FFF;
    border-bottom: 1px solid #777;
    padding: 0 4px;
    overflow: hidden;
    list-style: none;
}
.tabs li.current, .tabs li:hover {
    background-color:#52c8ff;
    color:#FFFFFF;
    border-color:#52c8ff;
    border-left-style: solid;
    border-right-style: solid;
    border-top-style: solid;
}
.tabs li {
    float: left;
    color: grey;
    line-height: 27px;
    margin-right: 1px !important;
    padding: 0 7px 10px 8px !important;
    font-weight: bold;
    cursor: pointer;
}
.tabs li.current span {
    color: #FFF;
}
.tabs li span {
    float: left;
    padding: 0 11px 0 0;
    height: 27px;
    color: #FFF;
}
</style>
<script type='text/javascript'>
$(function () {
	$('ul.tabs').delegate('li:not(.current)', 'click', function () {
		act(this);
	})
	function act(Obj){
		$(Obj).addClass('current').siblings().removeClass('current')
			.parents('div.section').find('div.box').eq($(Obj).index())
			.show().siblings('div.box').hide();
	};
})
</script>
</head>
<body>
<div class="section">
<!-- если переключатели стоят здесь, то все работает без проблем, но я хочу, что бы они были в самих табах
    <ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>
-->	 
    <div class="box visible">содержимое вкладки 1
	<div>Здесь какая-то информация</div>
	<div>Здесь потом будет картинка</div>
<!-- а вот сюда я хочу вставить переключатель табов (типа буллетов), но так "глючит"-->
	    <ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>
	 <div>А здесь еще какая-то информация</div>
    </div>
	
    <div class="box">содержимое вкладки 2
	<div>Здесь какая-то информация</div>
	<div>Здесь потом будет картинка</div>
<!-- а вот сюда я хочу вставить переключатель табов (типа буллетов), но так "глючит"-->
	    <ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>
	 <div>А здесь еще какая-то информация</div>
    </div>
	
    <div class="box">содержимое вкладки 3  
	<div>Здесь какая-то информация</div>
	<div>Здесь потом будет картинка</div>
<!-- а вот сюда я хочу вставить переключатель табов (типа буллетов), но так "глючит"-->
	    <ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>
	 <div>А здесь еще какая-то информация</div>
    </div>

</div>
</body>
</html>


При переключении табов таким способом периодически "глючит" переключатель - понимаю, что это происходит из-за того, что разным элементам li в различных вкладках присваивается класс "current", но как это исправить не знаю ((

рони 29.01.2017 12:58

Igorsrt,
подожду толмача

Igorsrt 29.01.2017 23:21

Цитата:

Сообщение от рони (Сообщение 442621)
Igorsrt,
подожду толмача

Вы мне Рони уже много раз помогали, спасибо за это... про то, кто такой "толмач" не понял... всегда Вы мне помогали, профессор ))
p.s. Хотел бы я так же понимать в скриптах - как этому научиться? (

рони 30.01.2017 02:22

Igorsrt,
Цитата:

Сообщение от рони
подожду толмача

жду человека который обьяснит, что вы хотите сделать

Igorsrt 30.01.2017 12:02

))
я хочу, что бы переключатели табов были в самих вкладках, т.е. что бы в этих самых вкладках, ниже значков переключателей можно было добавить еще какую-то информацию... что-то типа такого:
https://drive.google.com/file/d/0B4l...ew?usp=sharing

рони 30.01.2017 12:23

Igorsrt,
сделайте html с css и напишите как это должно работать, может быть тогда станет понятнее.

Dilettante_Pro 30.01.2017 12:31

Igorsrt,
Глючит из-за того, что у вас один и тот же переключатель
<ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>

присутствует три раза.

Igorsrt 30.01.2017 12:52

Цитата:

сделайте html с css
так я, вроде, вставил код html в самом первом сообщении... у меня там php вообще, но суть думаю понятна )
Цитата:

Глючит из-за того, что у вас один и тот же переключатель
...я это понимаю, а что сделать? ;)

рони 30.01.2017 13:00

Цитата:

Сообщение от Igorsrt
но суть думаю понятна )

Цитата:

Сообщение от рони
жду человека который обьяснит, что вы хотите сделать

:)

Igorsrt 30.01.2017 13:15

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

...Возможно так делать и нельзя, и нужно использовать свойство css position: absolute... но я боюсь, что это скажется на адаптивности

Igorsrt 30.01.2017 13:28

https://drive.google.com/file/d/0B4l...ew?usp=sharing

Dilettante_Pro 30.01.2017 13:42

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<style type='text/css'>
.box {
    display: none; 
    padding: 0px !important;
    background-color: #FFF;
}
.box.visible {
    display: block;
    padding: 10px;
}
ul.tabs {
    height: 27px;
    background: #FFF;
    border-bottom: 1px solid #777;
    padding: 0 4px;
    overflow: hidden;
    list-style: none;
}
.tabs li.current, .tabs li:hover {
    background-color:#52c8ff;
    color:#FFFFFF;
    border-color:#52c8ff;
    border-left-style: solid;
    border-right-style: solid;
    border-top-style: solid;
}
.tabs li {
    float: left;
    color: grey;
    line-height: 27px;
    margin-right: 1px !important;
    padding: 0 7px 10px 8px !important;
    font-weight: bold;
    cursor: pointer;
}
.tabs li.current span {
    color: #FFF;
}
.tabs li span {
    float: left;
    padding: 0 11px 0 0;
    height: 27px;
    color: #FFF;
}
</style>
<script type='text/javascript'>
$(function () {
	$('ul.tabs').delegate('li:not(.current)', 'click', function () {
		act(this);
	})
	function act(Obj){
		$(Obj).addClass('current').siblings().removeClass('current');
                var tabId = ($(Obj).index() + 1).toString();
		$('.info').html('Здесь какая-то информация ' + tabId);
                $('.pict').html('Здесь потом будет картинка ' + tabId);
                $('.add').html('А здесь еще какая-то информация ' + tabId);
	};
})
</script>
</head>
<body>
<div class="section"> 
    <div class="box visible">
	<div class='info'>Здесь какая-то информация 1</div>
	<div class='pict'>Здесь потом будет картинка 1</div>
    </div>
	
    <ul class="tabs">
        <li class="current">Вкладка 1</li>
        <li>Вкладка 2</li>
        <li>Вкладка 3</li>
     </ul>
     <div class='add'>А здесь еще какая-то информация 1</div>

</div>
</body>
</html>

рони 30.01.2017 14:34

Igorsrt,
для структуры
<div class="tabs">

            <ul>

                <li>1</li>

                <li>2</li>

                <li>3</li>

            </ul>

            <div>

                new 1

            </div>

            <div>

                new 2

            </div>

            <div>

                new 3

            </div>

        </div>


<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .tabs > div {
    display: none;
  }
  .tabs > ul > li.current {
     background-color: #52C8FF;
  }

  .tabs > ul > li {
      display: inline-block;
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    $(".tabs").each(function(indx, el) {
        var li = $(">ul>li", el),
            divs = $(">div", el);
        li.on("click", function(event) {
            event.preventDefault();
            var i = li.index(this);
            li.not($(this).toggleClass("current")).removeClass("current");
            divs.not(divs.eq(i).toggle()).hide()
        })
    })
});
  </script>
</head>

<body>
<div class="tabs">

    <ul>

        <li>One</li>

        <li>Two</li>

        <li>Three</li>

    </ul>

    <div>

        <div class="tabs">

            <ul>

                <li>1</li>

                <li>2</li>

                <li>3</li>

            </ul>

            <div>

                new 1

            </div>

            <div>

                new 2

            </div>

            <div>

                new 3

            </div>

        </div>

    </div>

    <div>

        test 2  add tabs

    </div>

    <div>

        test 3 add tabs

    </div>

</div>



</body>
</html>

рони 30.01.2017 14:38

Igorsrt,
http://api.jqueryui.com/tabs/

Igorsrt 30.01.2017 15:33

что-то, я не понял... или это не то (
В первом случае (коде Рони), весь контент "засунут" в скрипт и к нему подставляется ID таба?

рони 30.01.2017 16:14

Цитата:

Сообщение от Igorsrt
весь контент "засунут" в скрипт и к нему подставляется ID таба?

не осилил

Dilettante_Pro 30.01.2017 16:46

Igorsrt,
Цитата:

Сообщение от Igorsrt
В первом случае (коде Рони), весь контент "засунут" в скрипт и к нему подставляется ID таба?

М.б. не Рони? Пост 12?
Весь контент + ID таба засунут в скрипт для примера. У вас откуда появляется контент в табах?
В скрипте по конкретному ID таба можно брать контент с сервера или выбирать из заранее загруженного массива - совершенно необязательно иметь для каждого таба заранее расписанный html

Igorsrt 30.01.2017 18:05

Цитата:

М.б. не Рони? Пост 12?
да, не Рони... дико извиняюсь ((
контент в табах появляется из php функции...
насколько я понимаю, весь "геморой" в "моем" коде возникает из-за того что разным элементам li в раных div присвоены разным классам... Можно сделать так, что бы функция js "очищала" все элементы на странице (кроме нужного) от класса current?

Dilettante_Pro 30.01.2017 18:33

Igorsrt,
Цитата:

Сообщение от Igorsrt
контент в табах появляется из php функции...

В php можно сформировать json-файл сразу по всему контенту и грузить в таб по ID или подгружать с сервера при выборе конкретного таба

Насчет очистки - удалите сначала класс у всех, потом назначьте нужному.

Igorsrt 30.01.2017 18:40

Цитата:

М.б. не Рони? Пост 12?
да, не Рони... дико извиняюсь ((
контент в табах появляется из php функции...
насколько я понимаю, весь "геморой" в "моем" коде возникает из-за того что разным элементам li в разных div присвоены разные классы... Можно сделать так, что бы функция js "очищала" все элементы на странице (кроме нужного) от класса current?

Dilettante_Pro 30.01.2017 19:08

Igorsrt,
Не понял - почему повтор?
Цитата:

Сообщение от Igorsrt
Можно сделать так, что бы функция js "очищала" все элементы на странице (кроме нужного) от класса current?

Проблема в том, что срабатывает при выборе таба один элемент li - из текущего таба, а виден на экране другой - из нового таба. Возиться с ними - это не геморрой?


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