Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смена картинки без перезагрузки страницы, Картинка рисуется в функции 
:(
    Опции темы
S696S
Дата 30.1.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



На странице имеется набор различных диаграмм. Для каждой из них мы можем менять тип, т.е. по большому счету изменять картинку. Итак на основной странице(rep.php) имеется вызов функции, рисующей диаграмму: 
Код

...
print "<tr><td colspan=3>";
my_get_chart($surveys_id, $q_type_id, $q_id, $def_lang, $st_saved, $diag_type, $tbl, 0, $count_graph, $all_filters_for_table, $label);
print "</td></tr>";
...


и поле селект, в котором мы выбираем тип диаграммы, при этом происходит перезагрузка основной страницы:

Код

<form action='qqqq/rep.php#diag_<?= $q_id?>' method='get' name='jumpmenu_<?= $q_id?>'>
<input type=hidden name=surveys_id value=<?= $surveys_id?>>
<select name='f_d_<?= $q_id?>' onchange="document.jumpmenu_<?= $q_id?>.submit()">

<option  value="1" <?php if ($diag_type==1) print 'selected';?>>Cylinder bar shape
<option  value="2" <?php if ($diag_type==2) print 'selected';?>>3D pie chart
<option  value="3" <?php if ($diag_type==3) print 'selected';?>>Soft bar shading
<option  value="4" <?php if ($diag_type==4) print 'selected';?>>Donut chart
<option  value="5" <?php if ($diag_type==5) print 'selected';?>>Simple Bar Chart
<option  value="6" <?php if ($diag_type==4) print 'selected';?>>Multi-Color Bar Chart
<option  value="7" <?php if ($diag_type==7) print 'selected';?>>Cylinder Bar Shading
<option  value="8" <?php if ($diag_type==8) print 'selected';?>>3D Bar Chart
<option  value="9" <?php if ($diag_type==9) print 'selected';?>>Soft multi bar chart
<option  value="10" <?php if ($diag_type==10) print 'selected';?>>Stacked Bar Chart
<option  value="11" <?php if ($diag_type==11) print 'selected';?>>Multi-Cylinder Chart
<option  value="12" <?php if ($diag_type==12) print 'selected';?>>Overlapping Bar Chart
</select>
</form>


В функции my_get_chart происходит вывод:

Код

print "<img src=\"reports/getchart.php?".$chart1URL."\" border=\"0\" usemap=\"#map_".$q_id."_".$count_graph."\">";
print "<map name=\"map_".$q_id."_".$count_graph."\">";
print $imageMap;
print "</map>";


Хотелось бы сделать смену диаграмм без перезагрузки страницы.
PM MAIL   Вверх
boombick
Дата 30.1.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.4.2005
Где: Moscow, Russia

Репутация: нет
Всего: 9



Рисуйте и сохраняйте картинку на сервере, а потом просто перзагружайте ее на кклменте при помощи JS, после ответа сервера, что все ОК. (я говорю про AJAX)
Самый лобовой способ:
Код

<img src="diagramma.png" id="diagramma">
<script language = "javascript">
//...
if(req.status == "OK") { //req.status в данном случае это ответ сервера. О передаче этого ответа должна позаботиться ваша функция
    document.getElementById('diagramma').src = req.src; //здесь передаем местоположение новой картинки
}

Правда, браузеру понадобится время, чтобы загрузить новую диаграмму, поэтому нужно сделать предзагрузку картинки...
И еще один совет не по теме:
Имхо, лучше и понятнее писать так:
Код

<option  value="1"<?=($diag_type==1) ? 'selected' : '' ?>>Cylinder bar shape



--------------------
Все вышесказанное - имхо, и на истину в последней инстанции не претендует
------
UNIX and other
PM MAIL WWW ICQ   Вверх
vasac
Дата 30.1.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



А вот так, так вообще здорово:
<option selected="selected">Cylinder bar shape</option>
smile
PM WWW   Вверх
S696S
Дата 2.2.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Цитата

Рисуйте и сохраняйте картинку на сервере, а потом просто перзагружайте ее на кклменте при помощи JS, после ответа сервера, что все ОК. (я говорю про AJAX)


Так-то оно так. Но мне всё же не очень понятно как мне быть в данном случае, с поддержкой карты. Получается в событии onchange selecta'a мне надо вызывать некую функцию. Попробую объяснить.
Вот,  к примеру, я делал в другом месте, где не нужно передавать карту(теги map). там всё получилось довольно просто и хорошо. 

В основном скрипте:

Код

<script language='javascript'>
function show(path,value,q)
{
    if (obj = document.getElementById("pic"+q)) {
        obj.src = path+value;
        
    }
}
</script>



Код

<form action='' name='jumpmenu_<?= $q_id?>'>
<select name='f_sm_<?= $q_id?>' onchange=show("sur/q2.php?q_id=<?= $q_id?>&d_type=",document.jumpmenu_<?= $q_id?>.f_sm_<?= $q_id?>.value,<?= $q_id?>)>


Код

print "<tr><td colspan=3><img id=pic". $q_id." src=\"sur/q2.php?q_id=$q_id&d_type=$diag_type\"></td></tr>";


Ну и в q2.php следующее: 

Код

header("Content-type: image/png");
print($c->makeChart2(PNG));


Тут всё работает отлично.

Но теперь(см. хэдпост) я хочу в основном скрипте чтоб за отображение отвечала функция. 
Вобщем, основным вопросом является, что нужно мне написать в событии onchange selecta'a?
PM MAIL   Вверх
S696S
Дата 3.2.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Пока вопрос отпал, вследствие того, что необходимо всё равно во время прорисовки пробегать по основному скрипту в цикле, а это без перезагрузки я не представляю пока как сделать))
PM MAIL   Вверх
Sardar
Дата 4.2.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(S696S @  3.2.2007,  11:26 Найти цитируемый пост)
необходимо всё равно во время прорисовки пробегать по основному скрипту в цикле, а это без перезагрузки я не представляю пока как сделать)

Вот читаю я эту тему и мало врубаюсь, а что же народ вы делаете...  smile 

Картинки имеют событие onload
"Основной скрипт" можно "снова запустить" положив его в некую функцию, это думаю и без подсказки должно быть ясно.
Если для диаграм карты (map/area) разные, то их лучше все отдать на странице, чем подгружать динамически. С динамикой карту можно собрать DOM'ом, старую изменять не надо. Сменяем есессно через аттрибут usemap



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
S696S
Дата 5.2.2007, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Цитата

Пока вопрос отпал, вследствие того, что необходимо всё равно во время прорисовки пробегать по основному скрипту в цикле, а это без перезагрузки я не представляю пока как сделать)) 


Sardar, Ну я тут просто в двух словах описал одну причину из нескольких, причём довольно кривовато...Есть там довольно большие проблемки. Однако Ваш совет натолкнул меня на одну дельную мысль))Спасибо!  

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.