ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

FAQ 2.0 - вопросы и ответы (не флудить!)

 

2970
удалён @Foggy
Можно. Вначале добавляешь в никлист, а в стилях скрытым делаешь, а потом добавляешь класс и анимацию появления в стили.

4619
Web3r @Web3r
Хорошая идея.

В стили:
#users tr {
transition: opacity .75s ease-out, visibility .75s ease-out; /* Не забудьте префиксы */
opacity: 0;
visibility: hidden;
}
#users .appearance {
opacity: 1;
visibility: visible;
}

Скрипты, функция add():
var obj = ul.insertRow(index);
obj.id = nickid;
getComputedStyle(obj).opacity; // проверяем, повешен ли стиль
obj.className = "appearance"; // вешаем класс с анимацией
format(i, obj);

Отредактировано Web3r - 30.08.2015
232
Medd @ishkinyaev
Web3r пишет:

Хорошая идея.

В стили:
#users tr {
transition: opacity .75s ease-out, visibility .75s ease-out; /* Не забудьте префиксы */
opacity: 0;
visibility: hidden;
}
#users .appearance {
opacity: 1;
visibility: visible;
}

Скрипты, функция add():
var obj = ul.insertRow(index);
obj.id = nickid;
getComputedStyle(obj).opacity; // проверяем, повешен ли стиль
obj.className = "appearance"; // вешаем класс с анимацией
format(i, obj);


Уточни для чайника, пож, что за функция add?

4619
Web3r @Web3r
/* Функции добавления и удаления пользователей в массиве никлиста */
...
function add(nick,colornick,st,mw,icon,status,inchat,time,room,love,clan,userid){
...
if(room==myroom) {
...
seprules(1,st,mw);
var obj=ul.insertRow(index); obj.id=nickid;
getComputedStyle(obj).opacity; // проверяем, повешен ли стиль
obj.className = "appearance"; // вешаем класс с анимацией

format(i,obj);
}
}

2970
удалён @Foggy
Web3r, что делает строка getComputedStyle(obj).opacity? там же даже проверки нет.
а ещё это не очень правильно - проверять прозрачность. по сути это лишнее бесполезное обращение к DOM-дереву. класс в любом случае надо присваивать. а прозрачность в любом случае должна сработать. а писать эту проверку хз зачем. кто не добавил в стили - сам дурак.
а ещё className заменять полностью не всегда корректно. если нет рассчёта на старые браузеры, то можно писать obj.classList.add('appearance'). а если есть рассчёт, то проверять наличие такого класса и если его нет, то добавлять. лишний раз добавить не страшно, но тоже не корректно. но это всё же лучше, чем не безопасно переписывать.

232
Medd @ishkinyaev
Foggy пишет:

Web3r, что делает строка getComputedStyle(obj).opacity? там же даже проверки нет.
а ещё это не очень правильно - проверять прозрачность. по сути это лишнее бесполезное обращение к DOM-дереву. класс в любом случае надо присваивать. а прозрачность в любом случае должна сработать. а писать эту проверку хз зачем. кто не добавил в стили - сам дурак.
а ещё className заменять полностью не всегда корректно. если нет рассчёта на старые браузеры, то можно писать obj.classList.add('appearance'). а если есть рассчёт, то проверять наличие такого класса и если его нет, то добавлять. лишний раз добавить не страшно, но тоже не корректно. но это всё же лучше, чем не безопасно переписывать.

Вроде работает все как надо. Можно как-то улучшить код?

Черт, не все норм.. При добавлении этих двух строчек пропадает разделение никлиста

Отредактировано ishkinyaev - 30.08.2015
2970
удалён @Foggy
ishkinyaev, попробуй не добавлять строку getComputedStyle(obj).opacity
Web3r, вероятно, имел ввиду это
if(getComputedStyle(obj).opacity) obj.className = "appearance";
но в этом нет особого смысла. одной строки достаточно:
obj.className = "appearance";
и, как я писал выше, если не интересуют старые ослы, то лучше написать
obj.classList.add('appearance');

7094
Dim @Render
obj.classList.add - хз, но obj.classList.toggle - не заработал в IE11.
Поэтому без ишака className вполне себе годится.

2615
Сергей @Pegass
Render, у тебя глюки в IE11 прекрасно работают add, remove, toggle и contains, другое дело что нельзя указать несколько классов в параметрах, т.е. classList.toggle('hide') - работает, а вот classList.toggle('hide', 'view') - не работает, в какой-то версии мозилки такая беда была со всеми методами, потому по несколько параметров за раз лучше не писать в принципе, да и обычно это не нужно)))

4619
Web3r @Web3r
Foggy, у меня на лисе без getComputedStyle() не работает. Полагаю, браузер просто не успевает применить исходные стили к tr, как тут же появляется класс с противоположными значениями. А getComputedStyle() тормозит применение этого класса, ожидая исходный стиль.
Classlist можно с костылем для IE9.
Показать текст

2970
удалён @Foggy
Web3r, ВОУ. я даже не знал о возможности такого костылирования.
в такой ситуации лучше делать setTimeout(function() {/*тут добавлять класс*/}, 100);
так костыль выглядит хотя бы очевидным. и невооружённым взглядом можно понять, что костыль добавлен, потому что что-то не отрабатывает сразу. и, по-хорошему, в таких местах комментарием надо помечать, чего конкретно ждём.

2615
Сергей @Pegass
Foggy, комментирование для слабаков))))

83
Djoker @djoker
всем привет, не поделитесь советом как сделать так чтоб входя в чат человек видел сколько писем у его на почте и желательно если это будет сообщение в виде текста а не просто циферка возле кнопки почта

232
Medd @ishkinyaev
Web3r пишет:

Хорошая идея.

В стили:
#users tr {
transition: opacity .75s ease-out, visibility .75s ease-out; /* Не забудьте префиксы */
opacity: 0;
visibility: hidden;
}
#users .appearance {
opacity: 1;
visibility: visible;
}

Скрипты, функция add():
var obj = ul.insertRow(index);
obj.id = nickid;
getComputedStyle(obj).opacity; // проверяем, повешен ли стиль
obj.className = "appearance"; // вешаем класс с анимацией
format(i, obj);


Продолжая тему этой функции.
Поставили - получилось классно, но вылазят теперь вот такие порой дыры - ********** , исчезают только после обновления.
Исправимо?

2970
удалён @Foggy
Скриншот не открывается. Только у меня?

3173
Николай @grom
Foggy пишет:

Скриншот не открывается. Только у меня?

а ты запятую с адреса убери в конце

2970
удалён @Foggy
А, это потому, что функцию удаления чатланина тоже надо переписать. Я в отпуске, кода под рукой нет. Суть примерно та же, но вначале нужно удалить класс, а затем удалить участника.

17
Grinsens @Grinsens
Почему можно удалить входящую почту, а исходящую нет?

20090
Dimitry @Dimitry
потому что твоя исходящая лежит в чужом ящике как входящая и если её удалить то человек может быть её даже не прочитает,
сделано так чтобы не хранить 2 версии письма и не захломлять базу...

2970
удалён @Foggy
Grinsens, потому что база у Димы неправильно организована XD