X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Плавносворачивающиеся блоки
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 26.6.2009, 20:56; Ответить: Letmetouchyou
Сообщение #1


В ява скриптах не силён..
нужен скрипт как на http://games.triolan.com.ua/ - справа вверху есть стрелочки котрые аккуратно сворачивают блоки.
Пытался вязть скипт оттуда ( ето "ddaccordion.js" ) Но не получилось настроли его у себя.

[PHP]
var ddaccordion={

contentclassname:{}, //object to store corresponding contentclass name based on headerclass

expandone:function(headerclass, selected){ //PUBLIC function to expand a particular header
this.toggleone(headerclass, selected, "expand")
},

collapseone:function(headerclass, selected){ //PUBLIC function to collapse a particular header
this.toggleone(headerclass, selected, "collapse")
},

expandall:function(headerclass){ //PUBLIC function to expand all headers based on their shared CSS classname
var $=jQuery
var $headers=$('.'+headerclass)
$('.'+this.contentclassname[headerclass]+':hidden').each(function(){
$headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
})
},

collapseall:function(headerclass){ //PUBLIC function to collapse all headers based on their shared CSS classname
var $=jQuery
var $headers=$('.'+headerclass)
$('.'+this.contentclassname[headerclass]+':visible').each(function(){
$headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
})
},

toggleone:function(headerclass, selected, optstate){ //PUBLIC function to expand/ collapse a particular header
var $=jQuery
var $targetHeader=$('.'+headerclass).eq(selected)
var $subcontent=$('.'+this.contentclassname[headerclass]).eq(selected)
if (typeof optstate=="undefined" || optstate=="expand" && $subcontent.is(":hidden") || optstate=="collapse" && $subcontent.is(":visible"))
$targetHeader.trigger("evt_accordion")
},

expandit:function($targetHeader, $targetContent, config, useractivated){
$targetContent.slideDown(config.animatespeed, function(){config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), useractivated)})
this.transformHeader($targetHeader, config, "expand")
},

collapseit:function($targetHeader, $targetContent, config, isuseractivated){
$targetContent.slideUp(config.animatespeed, function(){config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), isuseractivated)})
this.transformHeader($targetHeader, config, "collapse")
},

transformHeader:function($targetHeader, config, state){
$targetHeader.addClass((state=="expand")? config.cssclass.expand : config.cssclass.collapse) //alternate btw "expand" and "collapse" CSS classes
.removeClass((state=="expand")? config.cssclass.collapse : config.cssclass.expand)
if (config.htmlsetting.location=='src'){ //Change header image (assuming header is an image)?
$targetHeader=($targetHeader.is("img"))? $targetHeader : $targetHeader.find('img').eq(0) //Set target to either header itself, or first image within header
$targetHeader.attr('src', (state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) //change header image
}
else if (config.htmlsetting.location=="prefix") //if change "prefix" HTML, locate dynamically added ".accordprefix" span tag and change it
$targetHeader.find('.accordprefix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
else if (config.htmlsetting.location=="suffix")
$targetHeader.find('.accordsuffix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
},

urlparamselect:function(headerclass){
var result=window.location.search.match(new RegExp(headerclass+"=((\\d+)(,(\\d+))*)", "i")) //check for "?headerclass=2,3,4" in URL
if (result!=null)
result=RegExp.$1.split(',')
return result //returns null, [index], or [index1,index2,etc], where index are the desired selected header indices
},

getCookie:function(Name){
var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair
if (document.cookie.match(re)) //if cookie found
return document.cookie.match(re)[0].split("=")[1] //return its value
return null
},

setCookie:function(name, value){
document.cookie = name + "=" + value + "; path=/"
},

init:function(config){
document.write('<style type="text/css">\n')
document.write('.'+config.contentclass+'{display: none}\n') //generate CSS to hide contents
document.write('<\/style>')
jQuery(document).ready(function($){
ddaccordion.urlparamselect(config.headerclass)
var persistedheaders=ddaccordion.getCookie(config.headerclass)
ddaccordion.contentclassname[config.headerclass]=config.contentclass //remember contentclass name based on headerclass
config.cssclass={collapse: config.toggleclass[0], expand: config.toggleclass[1]} //store expand and contract CSS classes as object properties
config.revealtype=/^(click)|(mouseover)$/i.test(config.revealtype)? config.revealtype.replace(/mouseover/i, "mouseenter") : "click"
config.htmlsetting={location: config.togglehtml[0], collapse: config.togglehtml[1], expand: config.togglehtml[2]} //store HTML settings as object properties
config.oninit=(typeof config.oninit=="undefined")? function(){} : config.oninit //attach custom "oninit" event handler
config.onopenclose=(typeof config.onopenclose=="undefined")? function(){} : config.onopenclose //attach custom "onopenclose" event handler
var lastexpanded={} //object to hold reference to last expanded header and content (jquery objects)
var expandedindices=ddaccordion.urlparamselect(config.headerclass) || ((config.persiststate && persistedheaders!=null)? persistedheaders : config.defaultexpanded)
if (typeof expandedindices=='string') //test for string value (exception is config.defaultexpanded, which is an array)
expandedindices=expandedindices.replace(/c/ig, '').split(',') //transform string value to an array (ie: "c1,c2,c3" becomes [1,2,3]
var $subcontents=$('.'+config["contentclass"])
if (expandedindices.length==1 && expandedindices[0]=="-1") //check for expandedindices value of [-1], indicating persistence is on and no content expanded
expandedindices=[]
if (config["collapseprev"] && expandedindices.length>1) //only allow one content open?
expandedindices=[expandedindices.pop()] //return last array element as an array (for sake of jQuery.inArray())
if (config["onemustopen"] && expandedindices.length==0) //if at least one content should be open at all times and none are, open 1st header
expandedindices=[0]
$('.'+config["headerclass"]).each(function(index){ //loop through all headers
if (/(prefix)|(suffix)/i.test(config.htmlsetting.location) && $(this).html()!=""){ //add a SPAN element to header depending on user setting and if header is a container tag
$('<span class="accordprefix"></span>').prependTo(this)
$('<span class="accordsuffix"></span>').appendTo(this)
}
$(this).attr('headerindex', index+'h') //store position of this header relative to its peers
$subcontents.eq(index).attr('contentindex', index+'c') //store position of this content relative to its peers
var $subcontent=$subcontents.eq(index)
var needle=(typeof expandedindices[0]=="number")? index : index+'' //check for data type within expandedindices array- index should match that type
if (jQuery.inArray(needle, expandedindices)!=-1){ //check for headers that should be expanded automatically (convert index to string first)
if (config.animatedefault==false)
$subcontent.show()
ddaccordion.expandit($(this), $subcontent, config, false) //Last Boolean value sets 'isuseractivated' parameter
lastexpanded={$header:$(this), $content:$subcontent}
} //end check
else{
$subcontent.hide()
config.onopenclose($(this).get(0), parseInt($(this).attr('headerindex')), $subcontent.css('display'), false) //Last Boolean value sets 'isuseractivated' parameter
ddaccordion.transformHeader($(this), config, "collapse")
}
})
$('.'+config["headerclass"]).bind("evt_accordion", function(){ //assign custom event handler that expands/ contacts a header
var $subcontent=$subcontents.eq(parseInt($(this).attr('headerindex'))) //get subcontent that should be expanded/collapsed
if ($subcontent.css('display')=="none"){
ddaccordion.expandit($(this), $subcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
if (config["collapseprev"] && lastexpanded.$header && $(this).get(0)!=lastexpanded.$header.get(0)){ //collapse previous content?
ddaccordion.collapseit(lastexpanded.$header, lastexpanded.$content, config, true) //Last Boolean value sets 'isuseractivated' parameter
}
lastexpanded={$header:$(this), $content:$subcontent}
}
else if (!config["onemustopen"] || config["onemustopen"] && lastexpanded.$header && $(this).get(0)!=lastexpanded.$header.get(0)){
ddaccordion.collapseit($(this), $subcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
}
})
$('.'+config["headerclass"]).bind(config.revealtype, function(){
if (config.revealtype=="mouseenter"){
clearTimeout(config.revealdelay)
var headerindex=parseInt($(this).attr("headerindex"))
config.revealdelay=setTimeout(function(){ddaccordion.expandone(config["headerclass"], headerindex)}, config.mouseoverdelay || 0)
}
else{
$(this).trigger("evt_accordion")
return false //cancel default click behavior
}
})
$('.'+config["headerclass"]).bind("mouseleave", function(){
clearTimeout(config.revealdelay)
})
config.oninit($('.'+config["headerclass"]).get(), expandedindices)
$(window).bind('unload', function(){ //clean up and persist on page unload
$('.'+config["headerclass"]).unbind()
var expandedindices=[]
$('.'+config["contentclass"]+":visible").each(function(index){ //get indices of expanded headers
expandedindices.push($(this).attr('contentindex'))
})
if (config.persiststate==true){ //persist state?
expandedindices=(expandedindices.length==0)? '-1c' : expandedindices //No contents expanded, indicate that with dummy '-1c' value?
ddaccordion.setCookie(config.headerclass, expandedindices)
}
})
})
}
} [/PHP]

вот так у них обозначена ссылка .. при клике на котрую происходит сворачивание. Взаимосвязи не нашол =(
<a class="contentswitcher"><img src="/templates/gsn/images/contentswitcher.gif" width="23" height="11" border="0" style="position:relative;top:0;left:2px;" /></a>


уж очень нужно его натсроить под себя или аналог етого скипта.. )
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 27.6.2009, 0:36; Ответить: Webmaster_hb
Сообщение #2


простой примерчик

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".btn-slide").click(function(){
$("#panel").slideToggle("slow");
return false;
});
});
</script>
<style type="text/css">
#panel {
display: none;
}
.btn-slide {
width:300px;
background-color:#F37E16;
text-align: center;
padding: 10px;
margin: 0 auto;
display: block;
font: bold 14px Arial, Helvetica, sans-serif;
color: #fff;
text-decoration: none;
}
</style>
</head>
<body>
<div id="panel">
<div style="background-color:#09C">
123<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</div>
</div>
<p class="slide"><a href="#" class="btn-slide">Совершенно секретно</a></p>
</body>
</html>
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 27.6.2009, 1:58; Ответить: Letmetouchyou
Сообщение #3


Большое спасибо)))) то что надо) :evrika:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Rost_hb
Rost_hb
сообщение 29.6.2009, 2:13; Ответить: Rost_hb
Сообщение #4


А вообще тебе неплохо было бы пару недель потусоваться вот здесь - jquery.com. (Хотя некоторые зависают там на полгода :)))

И на этом отличном блоге linkexchanger.su, на котором сам подробно познакомился с JQuery

С помощью этой библиотеки всякая-разная анимация, ajax-запросы, лайтбоксы и прочие эффекты создаются просто и непринужденно. Да и хотя бы закругленные уголки div-ов картинками или кучей тегов <b></b> делать больше не придется
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Rost_hb
Rost_hb
сообщение 29.6.2009, 2:19; Ответить: Rost_hb
Сообщение #5


К уже вышеописанному. Чтобы было понятно, что делаешь.

Подключаешь библиотеку JQuery (minimized version)
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
Инициализируешь функцию по событию загрузки DOM-модели документа
<script type="text/javascript">
$(document).ready(function(){
    $(".btn-slide").click(function(){
        $("#panel").slideToggle("slow");
        return false;
    });
});
</script>


А вообще, смотри ссылки выше. Обычно дня хватает, чтобы начать писать свои простые функции. И практика показывает, что даже основ javascript знать не надо.
JQuery - это действительно просто! :))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 15.7.2009, 19:37; Ответить: Letmetouchyou
Сообщение #6


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

то есть мы его свернули, потом перешли по ссылке - и блок опять развёрнут (а нужно чтобы он оставался свёрнутым). блок етот находиться в шапке страницы.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galen
Galen
сообщение 15.7.2009, 21:46; Ответить: Galen
Сообщение #7


Вам где-то нужно хранить инфу, о том какие блоки вы свернули, какие развернули. Можно использовать куки. И дорабатывать скрипт.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 15.7.2009, 23:13; Ответить: Letmetouchyou
Сообщение #8


а если куки не разрешены то не получиться :)
а по идеи можно же записывать ето в переменную в скрипте ?
1 - если блок свернут
0 - если блок развернут

и через if обрабатывать, и до загрузки страницы в стиле блока указывать видим он или нет. ( display:none; )

или хранить такую переменную в БД.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galen
Galen
сообщение 15.7.2009, 23:42; Ответить: Galen
Сообщение #9


Да, надёжнее хранить в скрытых полях формы, переменных сессии или БД.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 17.7.2009, 22:01; Ответить: Letmetouchyou
Сообщение #10


вот как передал скрипт и все работает:

[PHP]$(document).ready(function(){
$a=1;
$(".btn-slide").click(function(){
if ($a==1) {$a=0;} else {$a=1;}
$("#panel").slideToggle("slow");
return false;
});
if ($a==0) { document.ids.panel.display="none";}
});[/PHP]

разумно ето или нет.. но все работает )))


-----------------------------------------------------------
а нет) обманул) тестировал просто когда на ссылках было переход на "#"
преёдеться в БД загонять или скрытое поле
----------------------------------------------------------

теперь вопрос:
1)как передать переменную из PhP в JavaScripts?
2)Или как c помощью Javasripts записывать и считывать значение в скрытой форме ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Продам места под сквозные блоки на СМИ сайте
текст или графика
0 seo_vladimir 784 2.9.2020, 12:14
автор: seo_vladimir
Открытая тема (нет новых ответов) Не могу выровнять блоки по правую сторону
1 Dark_Delphin 5908 18.11.2016, 0:14
автор: -Петр Чирнов-
Открытая тема (нет новых ответов) При уменьшении масштаба разъезжаются блоки
0 Alex.Bulgakov 3512 9.11.2016, 15:28
автор: -Alex.Bulgakov-
Открытая тема (нет новых ответов) Как поднять блоки вверх
2 Denis_sf 12870 21.11.2013, 22:32
автор: -hennessy-
Открытая тема (нет новых ответов) Сайт расползается на блоки при смене размера шрифта
3 datenrettung 5630 26.2.2013, 22:16
автор: -Arks-


 



RSS Текстовая версия Сейчас: 18.4.2024, 23:01
Дизайн