Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2013, 00:37
Интересующийся
Отправить личное сообщение для TRos Посмотреть профиль Найти все сообщения от TRos
 
Регистрация: 10.04.2012
Сообщений: 25

Проблема с выводом текста подписи в галерее
Здравствуйте!

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

Код-пример вставки картинки-превью:

<input type="radio" id="pic1" class="pics" checked="checked" />
<label for="pic1" accesskey="2">
<img name="smallimg" src="PotPlayer_1.gif" height="60px" onclick = 'setBigImage(this)' alt="1" />
<p class="hid" id="p1">ЗДЕСЬ НУЖНЫЙ ТЕКСТ</p></label>


Место для вставки большой картинки:

<div id="bigpick">
    <img id = 'bigimg' src = "PotPlayer_1.gif"  height="390px" alt="" /><br />
    <p id="commentary"></p></div>


Функция javascript:

function setBigImage(foto) {
    document.getElementById("bigpick").style.cssText="opacity:0; filter: alpha(opacity=0);"; 
    setTimeout("document.getElementById('bigpick').style.cssText='text-align:center; opacity:1; filter: alpha(opacity=1); -webkit-transition:1s; -moz-transition:1s; -ms-transition:1s; -o-transition:1s; transition:1s;'", 500);
    document.getElementById("bigimg").src = foto.src;
   document.getElementById("bigimg").style.cssText="height:390px;"
// вот так я пытался решить, но не получилось
 if (document.getElementById("pic1").checked = true;) 
   {
document.getElementById("commentary").innerHTML = document.getElementById("p1") }}


Что я делаю не так, ткните, пожалуйста, носом
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2013, 02:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<style>
p.hid {
 background-color:#C1D3FB;
 position:absolute;
 display:none;
 border:1px solid blue;
 padding:4px 7px;
}
div[id^="bigpick"] {
 position:absolute;
 opacity:0;
}
</style>

<script type="text/javascript">
function setBigImage(a) {
  var arr = a.getAttribute('data').split(',');
  var Parr = document.getElementById(arr[0]).parentNode.getElementsByTagName('p');
  for(var i=0; i<Parr.length;i++){
   if(Parr[i])Parr[i].style.display='none';
  }
  document.getElementById(arr[0]).style.display='block';
  var v=document.getElementById(arr[1])
  v.innerHTML = v.innerHTML.replace(/^[\s\S]*?\{/img,arr[2]+'{');
}
</script>

<label class="MyImg-p" accesskey="2">
<img name="smallimg" src="http://javascript.ru/forum/images/smilies/smile.gif" height="60px" data="p1,style,#bigpick1" onclick="setBigImage(this)" />
</label>

<label class="MyImg-p" accesskey="2">
<img name="smallimg" src="http://javascript.ru/forum/images/smilies/smile.gif" height="60px"  data="p2,style,#bigpick1" onclick="setBigImage(this)" />
</label>


<label class="MyImg-p" accesskey="2">
<img name="smallimg" src="http://javascript.ru/forum/images/smilies/write.gif" height="60px"  data="p3,style,#bigpick2" onclick="setBigImage(this)" />
</label>

<style id="style">
#bigpick {
text-align:center;
opacity:1;
filter: alpha(opacity=1);
-webkit-transition:1s;
-moz-transition:1s;
-ms-transition:1s;
-o-transition:1s;
transition:1s;
}
</style>


<div id="bigpick1">
    <img id = 'bigimg' src = "http://javascript.ru/forum/images/smilies/smile.gif"  height="390px" alt="" /><br />
    <div id="commentary">
<p class="hid" id="p1">ЗДЕСЬ НУЖНЫЙ ТЕКСТ 1 11111</p>
<p class="hid" id="p2">ЗДЕСЬ НУЖНЫЙ ТЕКСТ 2  2222</p>
    </div>

</div>
<div id="bigpick2">
    <img id = 'bigimg' src = "http://javascript.ru/forum/images/smilies/write.gif"  height="390px" alt="" /><br />
    <div id="commentary">
<p class="hid" id="p3">ЗДЕСЬ НУЖНЫЙ ТЕКСТ3 3333</p>
    </div>
</div>
p1http://javascript.ru/forum/images/smilies/smile.gifbr /

Последний раз редактировалось Deff, 08.03.2013 в 02:59.
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2013, 13:40
Интересующийся
Отправить личное сообщение для TRos Посмотреть профиль Найти все сообщения от TRos
 
Регистрация: 10.04.2012
Сообщений: 25

Спасибо, почти то, что нужно, но в Вашей реализации нет возможности сделать текущую превьюшку полупрозрачной, чтобы пользователь видел, что он сейчас выбрал.
Именно по этой причине я связался с радиокнопками, чтобы привязать сотиль полупрозрачности к свойству "checked"...
И да! Нужно чтобы по умолчанию первая большая картинка отображалась (опять тот же "checked").
Пробовал модифицировать Ваш вариант под радиокнопки - понял, что хреновый из меня волшебник
Ответить с цитированием
  #4 (permalink)  
Старый 09.03.2013, 15:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от TRos
Спасибо, почти то, что нужно, но в Вашей реализации нет возможности сделать текущую превьюшку полупрозрачной, чтобы пользователь видел, что он сейчас выбрал.
Не оч понял - задачу ...
К вечеру что нидь изображу

Последний раз редактировалось Deff, 09.03.2013 в 15:33.
Ответить с цитированием
  #5 (permalink)  
Старый 09.03.2013, 17:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<style>
p.hid {
 background-color:#C1D3FB;
 position:absolute;
 display:none;
 border:1px solid blue;
 padding:4px 7px;
}
div[id^="bigpick"] {
 position:absolute;
 opacity:0;
}
img[name="smallimg"]{
  opacity:0.6
}
</style>

<script type="text/javascript">
function setBigImage(a) {
  var id = a.id;
  var arr = a.getAttribute('data').split(',');
  var Parr = document.getElementById(arr[0]).parentNode.getElementsByTagName('p');
  for(var i=0; i<Parr.length;i++){
   if(Parr[i])Parr[i].style.display='none';
  }
  document.getElementById(arr[0]).style.display='block';
  var v=document.getElementById(arr[1]);
  v.innerHTML = v.innerHTML.replace(/#bigpick[^\s]+/img,arr[2]).replace(/#img[^\s]+/img,'#'+id);
}
function First() {
  document.getElementById("img1").click(); //При загрузке стр. кликаем первый
}
</script>

<img id="img1" name="smallimg" src="http://javascript.ru/forum/images/smilies/smile.gif" height="60px" data="p1,style,#bigpick1" onclick="setBigImage(this)" />

<img id="img2"  name="smallimg" src="http://javascript.ru/forum/images/smilies/smile.gif" height="60px"  data="p2,style,#bigpick1" onclick="setBigImage(this)" />


<img id="img3" name="smallimg" src="http://javascript.ru/forum/images/smilies/write.gif" height="60px"  data="p3,style,#bigpick2" onclick="setBigImage(this)" />

<style id="style">
#bigpickNN {
text-align:center;
opacity:1;
filter: alpha(opacity=1);
-webkit-transition:1s;
-moz-transition:1s;
-ms-transition:1s;
-o-transition:1s;
transition:1s;
}
/*Cтиль кликанутого превью*/
#imgNN {
  opacity:1.0;
  border:blue dashed 1px;
}
</style>


<div id="bigpick1">
    <img id = 'bigimg' src = "http://javascript.ru/forum/images/smilies/smile.gif"  height="390px" alt="" onload="First()"/><br />
    <div id="commentary">
<p class="hid" id="p1">ЗДЕСЬ НУЖНЫЙ ТЕКСТ 1 11111</p>
<p class="hid" id="p2">ЗДЕСЬ НУЖНЫЙ ТЕКСТ 2  2222</p>
    </div>

</div>
<div id="bigpick2">
    <img id = 'bigimg' src = "http://javascript.ru/forum/images/smilies/write.gif"  height="390px" alt="" /><br />
    <div id="commentary">
<p class="hid" id="p3">ЗДЕСЬ НУЖНЫЙ ТЕКСТ3 3333</p>
    </div>
</div>
p2,style,#bigpick1 name=

Последний раз редактировалось Deff, 09.03.2013 в 19:52.
Ответить с цитированием
  #6 (permalink)  
Старый 09.03.2013, 17:41
Интересующийся
Отправить личное сообщение для TRos Посмотреть профиль Найти все сообщения от TRos
 
Регистрация: 10.04.2012
Сообщений: 25

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

ЗЫ: Спасибо за помощь - Вы дали мне возможность взглянуть на проблему под другим углом
Ответить с цитированием
  #7 (permalink)  
Старый 09.03.2013, 19:52
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от TRos
однако проблема с активным по умолчанию первым рисунком-превью остается
Поправил
Ответить с цитированием
  #8 (permalink)  
Старый 09.03.2013, 20:22
Интересующийся
Отправить личное сообщение для TRos Посмотреть профиль Найти все сообщения от TRos
 
Регистрация: 10.04.2012
Сообщений: 25

Супер!!! То, что нужно!!! Спасибо
Ответить с цитированием
  #9 (permalink)  
Старый 10.03.2013, 13:59
Интересующийся
Отправить личное сообщение для TRos Посмотреть профиль Найти все сообщения от TRos
 
Регистрация: 10.04.2012
Сообщений: 25

Я извиняюсь за назойливость А могли бы Вы немного объяснить некоторые моменты в Вашем коде (моих знаний, увы, не хватает, чтобы понять кое-какие выражения...). В частности интересуют строчки:

var arr = a.getAttribute('data').split(',');
  var Parr = document.getElementById(arr[0]).parentNode.getElementsByTagName('p');
  for(var i=0; i<Parr.length;i++){
   if(Parr[i])Parr[i].style.display='none';
  }


arr - это массив? Что такое аттрибут data? И что значит переменная i?

Если не трудно, объясните значение следующей строчки (уж слишком она заумна для меня ):

v.innerHTML = v.innerHTML.replace(/#bigpick[^\s]+/img,arr[2]).replace(/#img[^\s]+/img,'#'+id);


Здесь, в частности, интересует почему в arr[] постоянно меняются значения.

В принципе, что и откуда берется мне понятно: первое (до цикла) - это, скорее всего, получение текста комментария (цикл, пока не совсем понял ), а второе - вставка картинки. Но хотелось бы услышать комментарии более продвинутого человека в этом деле

Еще раз спасибо и извините за назойливость (просто хочется постичь истину )
Ответить с цитированием
  #10 (permalink)  
Старый 10.03.2013, 15:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от TRos
arr
Сообщение от TRos
Что такое аттрибут data?
Цитата:
<img id="img1" name="smallimg" src="http://javascript.ru/forum/images/smilies/smile.gif" height="60px" data="p1,style,#bigpick1" onclick="setBigImage(this)" />
В data мы воткнули: id открываемого блока с текстом, id тега style,id div-блока с большой картинкой
arr - массив, образуется после применения к строке(из data) .split(',');
http://javascript.ru/String/split

Сообщение от TRos
v.innerHTML = v.innerHTML.replace(/#bigpick[^\s]+/img,arr[2]).replace(/#img[^\s]+/img,'#'+id);
Здесь, в частности, интересует почему в arr[] постоянно меняются значения.
Этой строкой - мы в теге style заменяем значение #bigpickNN на реальное значение id открываемого блока с большой картинкой, выпарсенного split(om) из Data кликанутого превью
(А также заменяем и id #imgNN, - на текущее id кликнутой картинки

Последний раз редактировалось Deff, 10.03.2013 в 15:41.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом сообщений Visual Общие вопросы Javascript 0 01.02.2013 12:34
Проблема с выводом массива на консоль Vempel jQuery 1 06.08.2012 15:57
Проблема с выводом скрипта на страницу Mike_S. Общие вопросы Javascript 8 14.06.2011 07:26
Проблема с выводом контента в топ-панели Slavk0 Общие вопросы Javascript 0 28.03.2011 11:39
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56