LINUX.ORG.RU

Помогите разобраться с генерацией ссылок (уже сутки мучаюсь)

 ,


0

1

ekburg.artstudio-3d .ru (специально разбил ссылку, гугл пока не нужен)

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

Сама функция:

<script src="jquery.min.js">
</script>
<script>
    var hashTimeout;
    
    function updhash() {
        if (hashTimeout) clearTimeout(hashTimeout);
        hashTimeout = setTimeout(function() {
            hashTimeout = null;
            var k = $('#krpanoSWFObject')[0];
            window.location.hash="#"+k.get('xml.url').substr(0, 2)+","+k.get('view.hlookat')+","+k.get('view.vlookat')+","+k.get('view.fov');
        }, 100);    
    }
    
    $(document).ready(function(){
        var swf = createswf("krpano.swf");
        var options = window.location.hash.substr(1).split(',');
        if (options.length == 4) {
            swf.addVariable("xml",parseInt(options[0])+'.xml');
            swf.addVariable("view.hlookat", options[1]);
            swf.addVariable("view.vlookat", options[2]);
            swf.addVariable("view.fov", options[3]);
        }
        else {
            swf.addVariable("xml", "11.xml");
        }
        
        swf.embed("pano"); 
    });
    
</script>

hlookat, vlookat, fov - берется из выхлопа панорамного плеера.

11.xml - текущий файл конфигурации панорамы (для каждой свой)

В каждом управляющем xml есть экшн:

<events 
onviewchange="js(updhash())"
/>
Проверяет не сменился ли текущий вид и, если сменился, вызывает функцию.

Выхлоп в адресной строке получается такой:

.ru/#11,-25,5,45

Что означает:

текущая панорама из 11.xml
координаты центра: по горизонту -25, по вертикали 5, угол обзора 45.

Саму эту функцию я подсмотрел у коллег. У них работает, и у меня работает. Но нужно ее усовершенствовать, ибо есть проблема:

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

window.location.hash="#"+k.get('xml.url').substr(0, 2)+","+k.get('view.hlookat')+","+k.get('view.vlookat')+","+k.get('view.fov');

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

Она работает только если там цифры. Я пытался вводить «человеческие» префиксы типа:

window.location.hash="#scene"+k.get('xml.url').substr(0, 7)+"H"+k.get('view.hlookat')+"V"+k.get('view.vlookat')+"FOV"+k.get('view.fov');

Для формирования выхлопа типа:

.ru/#scene11h-25v5fov45

Но это уже не работает. Не грузится указанный вид - вылазит ошибка о невозможности загрузки xml.

Вопрос: Там что правда можно только цифры и запятые использовать? Хоть запятые на что можно сменить? (буквы - нельзя, решетку - нельзя. Проверил)

Может саму функцию нужно переписать как-то?



Последнее исправление: dk- (всего исправлений: 3)

Ответ на: комментарий от mm3
var options = window.location.hash.substr(1).split(',');

вот тут да?) substr(1) - количество знаков из имени xml, split(',') - символ разделитель?

что-то я себя дебилом чувствую. побегу проверять.

dk-
() автор топика

if (hashTimeout) clearTimeout(hashTimeout);

setInteral, не? И вообще, если флеш сам дёргает эту функцию по обновлении, зачем вешать таймаут?

Kalashnikov ★★★
()

>функция, мониторящая текущий вид, и, налету, обновляющая адрес в строке браузера

Это какой-то нехороший подход. Нельзя сделать так, чтобы то, что изменяет внешний вид само изменяло #хэш или вызывало функцию, которая делает всё, что надо?

Deleted
()
Ответ на: комментарий от Deleted

скорее всего нет. движок закрыт

к нему есть подобный официальный плагин. но тот работает иначе - еще менее удобно.

dk-
() автор топика
Ответ на: комментарий от dk-

Я не знаком с флешем совсем.

<events onviewchange="js(updhash())" />
Это по событию обновления картинки запускает обработчик updhash, так? Тогда выкинь вообше все интервалы и таймауты и меняй значения в этой функции. Кстати, отсюда все твои параметры нельзя в неё передать?

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

если изменилось отображаемое изображение - опять запускается функция «пересчета и вывода новых координат в строку адреса»

из самого xml/flash это же точно не сделать.

dk-
() автор топика

хрень какая-то

по наводке mm3 заменил в раобработчике символ разделитель.

научил воспринимать двузначные _цифровые_ имена xml файлов.

но если добавить букву - не работает.

как так то блин.

dk-
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.