Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разместить 2 одинаковых скрипта на 1 странице (https://javascript.ru/forum/misc/10860-razmestit-2-odinakovykh-skripta-na-1-stranice.html)

Kostyn4ick 25.07.2010 00:23

Разместить 2 одинаковых скрипта на 1 странице
 
Здравствуйте, возникла такая надобность разместить 2 одинаковых скрипта на 1 странице. С этим скриптом был файл custom:
$(document).ready(function() {
//Активизируем первую ссылку
$(".contentnav2 a:first").addClass("active2");
//Ширина площади одной страницы
var contentwidth2 = $(".contentholder2").width();
//Обще количество страниц
var totalcontent2 = $(".content2").size();
//Общая ширина всего контента (всех страниц)
var allcontentwidth2 = contentwidth2 * totalcontent2;
//Проскальзывание контента устанавливаем на ширину, которую получили выше
$(".contentslider2").css({'width' : allcontentwidth2});
//Теперь пишем новую функцию для проскальзывания и навигации
rotate = function(){
//Количество раз, на которое надо прокрутить контент
var slideid2 = $active2.attr("rel") - 1;
//Устанавливаем дистанцию, на которую происходит единичная прокрутка
var slidedistance2 = slideid2 * contentwidth2;
//Удаляем активный класс
$(".contentnav2 a").removeClass('active2');
//Добавляем активный класс
$active2.addClass('active2');
//Анимация проскальзывания
$(".contentslider2").animate({
        left: -slidedistance2
    }, 500 );
}; 
 
//Устанавливаем время для проведения проскальзывания
rotation = function(){
play = setInterval(function(){
//Навигация следующего слайда
$active2 = $('.contentnav2 a.active2').next();
if ( $active2.length === 0) {
//Перемещаемся к первому слайду в навигации
$active2 = $('.contentnav2 a:first');
}
rotate();
//Таймер устанавливаем на 5 сек
}, 6000);
};
//Запускаем функцию вращения
rotation();
$(".contentnav2 a").click(function() {
$active2 = $(this);
clearInterval(play);
rotate();
rotation();
return false;
});
});


и файл со стилями style.css:
Код:

#wrapper {
        width:225px;
        overflow:visible;
}

#slider {
        position:relative;
        padding:0px;
        overflow:hidden;

}
.content1 {
        width:220px;
        padding:0px;
        margin-left:4px;
        margin-right:1px;
        top:65px;
        float: left;
        position: relative;
}
.inslider a {
        text-decoration:none;
}
.contentholder {
        height:324px;
        width: 225px;
        overflow: hidden;
        position: relative;
}
.contentslider {
        position: absolute;
        top: 0; left: 0;
}
.imgslider img {
        float: left;
}
.contentnav {
        position: absolute;
        bottom: 0px; left:0px;
        height:30px;
        z-index: 100;
        text-align: center;
        line-height: 30px;
        border: 1px solid #000;
        border: 1px solid #000;
        padding:0px;
}
.contentnav a {
        padding: 5px;
        margin-left:0px;
        text-decoration: none;
        color: #7c7c7e;
}
.contentnav a.active {
        font-weight: bold;
        color:#FFF;
        background: #603;
}

Для решения этой проблемы я создал второй файд custom2.js и style2.css

В стилях поменял название каждого класса.
Да, и на странице пишу что-то такого плана:
Код:

<div style="width:225px; height:324px">
      <script src="custom2.js" type="text/javascript"></script>
<div id="wrapper2">
<div id="slider2">
<div class="inslider2">
    <!-- Контейнер контента  -->
<div class="contentholder2">
<div class="contentslider2">

<div class="content2">
<h1>Заголовок</h1>
<p>Текст</p>
</div>


<div class="content2">
<h1>Заголовок</h1>
<p>Текст</p>
</div>



<div class="content2">
<h1>Заголовок</h1>
<p>Текст</p>
</div>



<div class="content2">
<h1>Заголовок</h1>
<p>Текст</p>
</div>

</div>
</div>
<div class="contentnav2">
      <a rel="1" href="#">1</a>
      <a rel="2" href="#">2</a>
      <a rel="3" href="#">3</a>
      <a rel="4" href="#">4</a>
 </div>
</div>

</div>
</div>
</div>

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

По отдельности все работает замечательно, как только я их объеденяю, работает только последний.
Как быть?

Да, и на заметку, знания Явы отвратителные, но с программированием дружу( C++, C#)

Я изменил файл со второй функцией, переименовал в нем глобальную переменную, ошибка осталась та же.
Теперь он имеет следующий вид:
$(document).ready(function fnc() {
//Активизируем первую ссылку
$(".contentnav2 a:first").addClass("active2");
//Ширина площади одной страницы
var contentwidth2 = $(".contentholder2").width();
//Обще количество страниц
var totalcontent2 = $(".content2").size();
//Общая ширина всего контента (всех страниц)
var allcontentwidth2 = contentwidth2 * totalcontent2;
//Проскальзывание контента устанавливаем на ширину, которую получили выше
$(".contentslider2").css({'width' : allcontentwidth2});
//Теперь пишем новую функцию для проскальзывания и навигации
rotate = function fnc(){
//Количество раз, на которое надо прокрутить контент
var slideid2 = $active2.attr("rel") - 1;
//Устанавливаем дистанцию, на которую происходит единичная прокрутка
var slidedistance2 = slideid2 * contentwidth2;
//Удаляем активный класс
$(".contentnav2 a").removeClass('active2');
//Добавляем активный класс
$active2.addClass('active2');
//Анимация проскальзывания
$(".contentslider2").animate({
        left: -slidedistance2
    }, 500 );
}; 
 
//Устанавливаем время для проведения проскальзывания
rotation = function fnc(){
play = setInterval(function fnc(){
//Навигация следующего слайда
$active2 = $('.contentnav2 a.active2').next();
if ( $active2.length === 0) {
//Перемещаемся к первому слайду в навигации
$active2 = $('.contentnav2 a:first');
}
rotate();
//Таймер устанавливаем на 5 сек
}, 6000);
};
//Запускаем функцию вращения
rotation();
$(".contentnav2 a").click(function fnc() {
$active2 = $(this);
clearInterval(play);
rotate();
rotation();
return false;
});
});

Gvozd 25.07.2010 01:03

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.

ЗЫ про отладку на этом сайте вполне достаточно написано.как и про другие связанные вещи

Kostyn4ick 25.07.2010 01:08

Цитата:

Сообщение от Gvozd (Сообщение 65041)
Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.

ЗЫ про отладку на этом сайте вполне достаточно написано.как и про другие связанные вещи

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

Gvozd 25.07.2010 09:49

Цитата:

Сообщение от Kostyn4ick
уперся в "стену" незнания

программировать умеете?
значит должны уметь отлаживать.
или мне за вас отладить?

Kostyn4ick 25.07.2010 11:36

Отлаживать умеем, вопрос не в работе скрипта, а в работе двух скриптов одновременно..Возможно здесь нужно применить что то вроде многопоточности в С++. Я не знаю нюансов этого языка. Если бы я мог сам справиться, я бы не напрягал людей зря.

Gvozd 25.07.2010 12:00

Цитата:

Сообщение от Kostyn4ick
var contentwidth2

вот почему-то локальные переменные внутри функций ты переименовал, хотя они никак между собой не конфликтуют
Цитата:

Сообщение от Kostyn4ick
rotate = function(){

Цитата:

Сообщение от Kostyn4ick
rotation = function()

а вот глобальные функции, почему-то оставил одинаково названными.

а вот, если бы сел отлаживать, то ты бы увидел что в первый раз вызывается первая объявленный функция, а затем только вторая

Kostyn4ick 25.07.2010 12:55

Да, я видел это, и даже пытался испоавить, когда во втором файле меняю function() на function2() например, скрипт перестает работать

Gvozd 25.07.2010 13:34

Цитата:

Сообщение от Kostyn4ick
меняю function() на function2()

иди, блин, читай учебник по JS
развелось тут всяких.
это форум программистов JS
либо тех кто учится программировать на нем.
поэтому фразы типа "я не знаю JS, помогите мне" - не канают.

садись, и читай доки

Kostyn4ick 25.07.2010 13:38

Цитата:

Сообщение от Gvozd (Сообщение 65080)
иди, блин, читай учебник по JS
развелось тут всяких.
это форум программистов JS
либо тех кто учится программировать на нем.
поэтому фразы типа "я не знаю JS, помогите мне" - не канают.

садись, и читай доки

Вам бы не помешало подучить правила общения с людьми, ведь я Вас не оскорблял и не грубил Вам, если вы не можете помочь, то не пишите здесь, я попросил помощи в данной задаче, а не совета как мне жить и что учить. Но все равно спасибо вам за то, что обратили внимание на мой пост. Удачи!

DooMer 26.07.2010 10:48

$(document).ready(function() {

второй скрипт переопределяей функцию ready, поэтому и выполняеться только второй

Kostyn4ick 26.07.2010 11:04

Каким образом этого можно избежать?

Gvozd 26.07.2010 11:10

Цитата:

Сообщение от DooMer
$(document).ready(function() {

второй скрипт переопределяей функцию ready, поэтому и выполняеться только второй

Глупостей не говори

Kostyn4ick 26.07.2010 12:01

Gvozd, я прислушался к Вашему совету и почитал немного о яве, и подправил второй файл, его измененный код лежит в первом сообщении.

Gvozd 26.07.2010 12:19

Kostyn4ick,
в вашем коде, в тех местах, где вы его поправили, вы сделали это неверно

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

функции в JS являются такими же объектами, как и все остальное.

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

также, в плане общего развития почитайте о замыканиях
хотя, вы сможете исправить код, и без чтения этой статьи, но она окажется полезной, для общего ознакомления.

Kostyn4ick 26.07.2010 12:59

Gvozd, большое спасибо за такой ответ, сейчас засяду за статьи!
+1 вам)

Kostyn4ick 26.07.2010 13:05

как я понял, мою запись $(document).ready(function() необходимо заменить на var fnc = function() и позже вызывать как fnc, или не в ту сторону иду?

Gvozd 26.07.2010 13:08

Цитата:

Сообщение от Kostyn4ick
или не в ту сторону иду?

не в ту.
я ранее упоминал те два объявления функций, которые вам следует поменять.

Kostyn4ick 26.07.2010 13:22

Да, я помню, вы упоминали про вот - это rotate = function()
Что то я совсем не понимаю, эта функция анонимна и объявлена не через var, значит она не глобальна, или не верно?

Kolyaj 26.07.2010 13:26

function rotate() {}


http://dmitrysoshnikov.com/ecmascrip...r-5-functions/

Kostyn4ick 26.07.2010 13:30

Ураааа, заработало, большое всем спасибо за помощь, теперь я понял, что ява слишком отличается от других языков, теперь буду учиться!

Kolyaj 26.07.2010 13:44

Цитата:

Сообщение от Kostyn4ick
теперь буду учиться!

С названия языка начни.

Gvozd 26.07.2010 23:46

Цитата:

Сообщение от Kostyn4ick
эта функция анонимна и объявлена не через var, значит она не глобальна

нет, как раз-таки глобальна

а вот так вот получится локально объявленная переменная.
*!*var*/!* rotate = function(){

ив таком виде(не меняя имя функции) ее можно использовать в обоих скриптах

JsLoveR 27.07.2010 01:09

Kostyn4ick, желательно начинать с изучения javascript, а не Jquery;)


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