Jump to content
  • 0

Нелогичное поведение скрипта


Ge1i0N
 Share

Question

Есть сайт.

В нём на странице участника есть код


<div class="right">
<a href="" class="l"></a>
<div class="border"><img></div>
<a href="" class="r"></a>
</div>

Картинки могут быть разного размера, но не более 422px. Кнопки .l и .r следовательно должны меняться под размеры каждого отдельного изображения.

Поскольку .right размер не фиксирован height:100% тут не отделаться.

Есть вот такой js


$(document).ready(function(){
var height = $(".right").height();
$(".r, .l").css('height', height+'px');
});

Всё хорошо, тол ько есть небольшой баг. Если зайти на страницу напрямую (откройте webkit браузер и посетите ссылку), то размеры блоков не занимают 100% как надо было бы, а почему-то около 30px в высоту. Если покликать по правой стрелке то баг проходит, вся проблема возникает только при первичном заходе или обновлении страницы на странице с фоткой.

Edited by Ge1i0N
Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Переверстайте. Это неправильно делать на JS то что проще сделать версткой. это ненужные костыли.

А не работает - потому что скрипт срабатывает до того как подгрузилась картинка. Если на то пошло, то в данном случае лучше отслеживать её подгрузку

Edited by Николя223
Link to comment
Share on other sites

  • 0

Переверстайте. Это неправильно делать на JS то что проще сделать версткой. это ненужные костыли.

К сожалению я не придумал как иначе можно сделать, сказывается недостаток опыта.

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

Есть какие-нибудь предложения, покажите путь куда надо думать.

А не работает - потому что скрипт срабатывает до того как подгрузилась картинка. Если на то пошло, то в данном случае лучше отслеживать её подгрузку

Доделал скрипт, вроде правильно. В вебкитах как-то странно работает, не на всех страницах считывает высоту. В опере 12 отказывается приписывать высоту.

Link to comment
Share on other sites

  • 0

Попробуй исполнять скрипт по window onload или как уже сказали, отслеживать загрузку картинок. Примеры есть в интернете.

Вроде бы везде всё работает кроме оперы 12, но почему-то если он откэшировал картинку, не хочет выводить стрелки. нынче скрипт такой:


$(document).ready(function(){
$(".border img").load(function() {
var height = $(".border").outerHeight();
$(".l, .r").height(height);
});
});

Link to comment
Share on other sites

  • 0

попробуй для оперы кэш запретить

 <meta http-equiv="Cache-Control" content="private">

Странно, но сработало везде, кроме оперы. Уже что-то, спать правой спасибо!

В опере приходится нажимать правой кнопкой->показать изображение чтобы хоть что-то было.

Edited by Ge1i0N
Link to comment
Share on other sites

  • 0

там дело не в кэше. может убрать расстановку стрелок и картинки через float, и поменять на display: inline-block

Увы, не помогло. Мне, честно говоря, не понятно почему опера не хочет отображать стрелки.

Link to comment
Share on other sites

  • 0
Зачем пытаться что-то сделать под 12ю оперу, если последняя 15я? Все давно обновились и забыли. Кто не обновил - того проблемы.

Затем, что огромное количество людей сидят на 12 версии включая меня, так как она лучше, стабильней и функциональней 15 ве рсии, из которой сделали ещё один хром но без закладок. Вы же читаете хабр, должны знать.

ссылки битые...

Нормальные, там на сервере проблемы бывают иногда просто.

Edited by Ge1i0N
Link to comment
Share on other sites

  • 0

Сохраняю через хром себе на комп скрипт - все работает как надо в 12й опере. Через оперу не могу сохранить, она почему-то height.js не сохраняет.

Смотри залила на сервер - http://vtest.uphero....st/Contest.html и в 12й опере отображает уже нормально, ток стрелочек не видно - но эт просто пути надо править. Что за чертовщина?

Edited by Zverushka
  • Like 1
Link to comment
Share on other sites

  • 0

Забавно, вот такой код только в опере и работает:


$(document).ready(function(){
var height = $(".right").height();
$(".r, .l").css('height', height+'px !important');
});

Я в скриптах новичок, так что надеюсь что вы подскажите.

В данной ситуации я вижу только вариант задать условие:

Если опера - данный скрипт, иначе - первый.

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


if (jQuery.browser.opera){
var rand = Math.random();
// fix opera bug decaching images
$(pic).prop('src',src+'?'+ rand)
}

UPD: поскольку сайт на ucoz, я используя их логику создал определение браузера и выдачу нужного скрипта каждому пользователю. Всем кто помогал - СПАСИБО ОГРОМНОЕ.

Edited by Ge1i0N
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy