Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Javascript. Фильтры. IE и другие...

3.4K
16 октября 2006 года
cogonet
198 / / 25.07.2006
Наверное знают все что для того что бы в эксплорере нормально отображались .png файлы нужно использовать фильтр
 
Код:
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img.png')
в нормальных же браузерах достаточно написать
 
Код:
background: url(img.png)
Проблема в том, что нужно в зависимости от версии браузера, программно (Javascript) то есть, не подключая, например другую CSS, а именно программно, использовать тот или иной способ. Делаю так:
Код:
<script language="javascript">
  browsStyle='';
  bUrl="";
if (navigator.userAgent.indexOf('MSIE')!=-1)
{
  browsStlye='filter';
  bUrl="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/";
 
}
else
{
  browsStyle='background';
  bUrl="url('img/";
}
document.getElementById('id').style.setProperty(browsStyle, bUrl+"img.png')"
<script>


Но, к моему большому сожалению такая конструкция почему то не работает, а если точнее то IE выдает «Object doesn’t support this property or method.» Может кто знает в чем проблема? Или другой вариант ее решения?
8
16 октября 2006 года
mfender
3.5K / / 15.06.2005
А как вообще сочетается ('img/"; с традиционными взглядами на ситаксис?
3.4K
16 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=mfender]А как вообще сочетается ('img/"; с традиционными взглядами на ситаксис?[/QUOTE]
А в чем собственно проблема? В зависимости от значения bUrl используется конкатенация - bUrl+"img.png')!
2.8K
17 октября 2006 года
Unglued
119 / / 15.09.2005
[HTML]
<script language="javascript">
if (navigator.userAgent.indexOf('MSIE')!=-1) document.getElementById('id').style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/img.png')";
else document.getElementById('id').style.background = "url('img/img.png')";
<script>[/HTML]

Я бы так написал
15
17 октября 2006 года
shaelf
2.7K / / 04.05.2005
Я не понял одного. А для чего это нужно? Просто правила в CSS перекрывают друг друга, и если вначале поставить background, а затем поставить фильтр... Или использововать условные комментарии (единственное за что я благодарен мелкомягким)? Ведь если можно обойтись без JavaScript, то это нужно делать.
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=Unglued][HTML]
<script language="javascript">
if (navigator.userAgent.indexOf('MSIE')!=-1) document.getElementById('id').style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/img.png')";
else document.getElementById('id').style.background = "url('img/img.png')";
<script>[/HTML]

Я бы так написал[/QUOTE]

И я бы так написал :) но все дело в том, что это лишь пример, а на самом деле кода намного больше и много больше лишних буковок! )) Поэтому такой вариант не подходит.
[QUOTE=shaelf]Просто правила в CSS перекрывают друг друга, и если вначале поставить background, а затем поставить фильтр...[/QUOTE] Вообще-то, если это будет например IE, то свойства background он не увидит, и наоборот.
[QUOTE=shaelf]Ведь если можно обойтись без JavaScript, то это нужно делать.[/QUOTE] Если бы можно было - я б вам голову не морочил (
8
17 октября 2006 года
mfender
3.5K / / 15.06.2005
[quote=cogonet]И я бы так написал :) но все дело в том, что это лишь пример, а на самом деле кода намного больше и много больше лишних буковок! )) Поэтому такой вариант не подходит.
......
Если бы можно было - я б вам голову не морочил ([/quote]
Лаконичность кода нужна, но не надо чрезмерно усердствовать, сводя процедуру к одной строке.

А по теме: используй GIF. Он более перевариваемый всеми брузерами. PNG хороший, но пока ещё не общепринятый.
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=mfender]Лаконичность кода нужна, но не надо чрезмерно усердствовать, сводя процедуру к одной строке. [/QUOTE]

Господа, я вижу вы ищите легких путей! ))
А хоть кто-то попробовал написать так как я? Почему пример не работает?
Просто кода действительно много для разных версий, и писать одно и тоже только из-за изменения двух параметров не очень хочется - неправильно это как-то!
Цитата:
А по теме: используй GIF.


Гиф уместен не всегда!

13
17 октября 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=cogonet]Гиф уместен не всегда![/QUOTE]
Создавай сайты полностью во флеше и будет тебе счастье. Там и прозрачность, и сокеты, и анимация и еще много вкусняшек...

А если тебе в дизайне потребовалась прозрачность - значит либо ты неправильно верстаешь, либо дизайн кретинский, либо и то и другое.
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=RussianSpy]Создавай сайты полностью во флеше и будет тебе счастье.[/QUOTE]
Хороший совет, обязательно воспользуюсь! Когда начну делать не кретинский дизайн!
15
17 октября 2006 года
shaelf
2.7K / / 04.05.2005
>>Если бы можно было - я б вам голову не морочил (
Доводы против.
8
17 октября 2006 года
mfender
3.5K / / 15.06.2005
[quote=cogonet]Господа, я вижу вы ищите легких путей! ))
А хоть кто-то попробовал написать так как я? Почему пример не работает?
Просто кода действительно много для разных версий, и писать одно и тоже только из-за изменения двух параметров не очень хочется - неправильно это как-то!

Гиф уместен не всегда![/quote]


[quote=cogonet]Господа, я вижу вы ищите легких путей! ))[/quote]
Господин, лёгких путей ищете Вы. Ибо спросить готового ответа на форуме - самое простое.
[quote=cogonet]А хоть кто-то попробовал написать так как я? Почему пример не работает?[/quote]
А почему бы тебе не написать так, ка пишу я? Может и "пример" заработает?
Цитата:
Просто кода действительно много для разных версий, и писать одно и тоже только из-за изменения двух параметров не очень хочется - неправильно это как-то!


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

3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=shaelf]
Доводы против.[/QUOTE]
Изменяется всего два элемента, но на 6 разных вариантов. Это 6 css файлов! Нецелесообразно ((
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=mfender]Господин, лёгких путей ищете Вы. Ибо спросить готового ответа на форуме - самое простое.
[/QUOTE]
О, поверте, прежде чем прийти сюда, я долго посидел над этим вопросом!
[QUOTE=mfender]А почему бы тебе не написать так, ка пишу я? Может и "пример" заработает?[/QUOTE]
Прости, може я чего-то не заметил. Как так?
[QUOTE=mfender]
Ты когда-нибудь для Windows писал? [/QUOTE] :eek: Для Windows - нет!!! Под Windows - да. Но знаете ли, Windows это не браузер с интернетом где каждый байт может быть на счету!!
13
17 октября 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=cogonet]Но знаете ли, Windows это не браузер с интернетом где каждый байт может быть на счету!![/QUOTE]

Собственно именно благодаря такому мнению и появляются здоровенные программы вроде Неро7 под 600 Мб или игры под 5-6 Гб...

"Низкую квалификацию и лень программистов старательно компенсируют производители железа год от года выпуская все более мощные комплектующие" (с)
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
[QUOTE=RussianSpy]Собственно именно благодаря такому мнению и появляются здоровенные программы вроде Неро7 под 600 Мб или игры под 5-6 Гб...[/QUOTE]

Что-то я не совсем понял. Это в чью сторону выпад, мою или mfender. Я вродь как поменьше кода хочу написать :confused:
15
17 октября 2006 года
shaelf
2.7K / / 04.05.2005
Кстати таблицы стилей называются каскадными не просто так.
Неужеле сложно сделать ещё один для ослика? Или вообще писать в комментах ослиных <!--[if IE]>
>>Это 6 css файлов! Нецелесообразно ((
А вот по поводу целесообразности готов спорить. Если нужен интерактив, то нужно юзать JavaScript, если она используется только для эагрузки этого background'a, то неуверен. Просто много людей сидят с отключёнными скриптами и списывать их со счетов нельзя.
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
...и списывать их со счетов нельзя

полностью с вами согласен, но в этом случае без них никак (( Скрипты используются не только в этом случае.

Цитата:
Если нужен интерактив...


Значение background'a изменяется в зависимости от действий пользователя. Притом все это без перезагрузки страницы!

15
17 октября 2006 года
shaelf
2.7K / / 04.05.2005
Я искренне надеюсь, что это не :hover )
3.4K
17 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
Я искренне надеюсь, что это не :hover )


)))) Нет

2.8K
18 октября 2006 года
Unglued
119 / / 15.09.2005
флешь - говно, а всплывающее оконце с полупрозрачной тенью - это очень красиво

есть еще вариант


<style type="text/css" id="shadowIE" disabled="true">
....
</style>
<style type="text/css" id="shadowOpera" disabled="true">
....
</style>
...
if (IE) document.styleSheets("shadowIE").disabled = false;
if (Opera) document.styleSheets("shadowOpera").disabled = false;

Кстати, а что конкрено не работает?
13
18 октября 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=Unglued]флешь - говно,[/QUOTE]
Аргументируйте. Он говно потому что вы не умеете им пользоваться? Или у вас есть более веские аргументы
[QUOTE=Unglued] а всплывающее оконце с полупрозрачной тенью[/QUOTE]
А как насчет тех браузеров, которые не поддерживаются вашим "примером"? Safari или Epiphania.... Да тот же Firefox например... А что делать с теми браузерами которые не поддерживают фильтры IE (которые кстати изобретение БГ и его компании и не являются стандартом, а значит сторонние производители вовсе не обязаны их поддерживать).
3.4K
18 октября 2006 года
cogonet
198 / / 25.07.2006
Спасибо, вариант хороший, но к сожалению мне не подходит ((
А не работает код из первого месаджа.
352
18 октября 2006 года
skywalker
694 / / 10.02.2006
Если, автор топика, настолько принципиально против прозрачных PNG, кстати уже работающь в IE 7, то используй flash, только надо будет убивать предложение на активацию (т.е. нажмите, что бы активировать).
Как это делать, см. вот здесь:
http://msdn.microsoft.com/workshop/author/dhtml/overview/activating_activex.asp

А вообще, используй CSS хак для ie, а для нормальных браузеров, просто пиши адрес картинки, все же проще, чем плодить тучу кода, для разделения, кстати, кода будет гораздо меньше.
3.4K
18 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
Если, автор топика, настолько принципиально против прозрачных PNG

Вы наверное невнимательно читали - автор топика как раз принципиально ЗА прозрачные png, иначе проблемы бы не существовало.

Цитата:
кстати уже работающь в IE 7

То что тугодумы в Microsoft наконец-то додумались до поддержки пнг в IE меня конечно радует, но думать я об этом буду когда на него пересядет столько же пользователей сколько сейчас сидят на 6-ой!

Цитата:
используй CSS хак для ie

Повторю пожалуй еще раз - сделать нужно с помощью яваскрипт. Без использования стилей как таковых!

352
18 октября 2006 года
skywalker
694 / / 10.02.2006
[QUOTE=cogonet]
 
Код:
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img.png')

Но, к моему большому сожалению такая конструкция почему то не работает, а если точнее то IE выдает «Object doesn’t support this property or method.» Может кто знает в чем проблема? Или другой вариант ее решения?[/QUOTE]
А ты весь код показал?
Дело в том, что для IE нужно задать прозрачность так (применительно к CSS):
 
Код:
#divID{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img.png')}
#divID img{filter:progid:DXImageTransform.Microsoft.Alpha(opacity="0");}
3.4K
18 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
Дело в том, что для IE нужно задать прозрачность так (применительно к CSS):

Весь, все нормально работает. Проблема то не в этом!

352
18 октября 2006 года
skywalker
694 / / 10.02.2006
[QUOTE=cogonet]
 
Код:
<script language="javascript">
  browsStyle='';
  bUrl="";
if (navigator.userAgent.indexOf('MSIE')!=-1)
{
  browsStlye='filter';
  bUrl="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/";
 
}

[/QUOTE]
Вообще, думаю у тебя просто ошибка, выше писали, что ты скобку не закрыл, в примере. Может ищё где есть такие же ошибки.
3.4K
18 октября 2006 года
cogonet
198 / / 25.07.2006
Это не незакрытая скобка!!!! bUrl - строковая переменная! К которой потом добавляется имя файла с закрытой скобкой!!!! Эх...
2.8K
18 октября 2006 года
Unglued
119 / / 15.09.2005
Во-первых в коде ошибка:
document.getElementById('id').style.setProperty(browsStyle, bUrl+"img.png')"
<script>
в самом конце должно быть еще - ");"
т.е. ...style.setProperty(browsStyle, bUrl+"img.png')");

Во-вторых я считаю что не надо так извращаться, а в стялях прописать И бэкгроунд И фильтр, ибо если браузер фильтр не поймет он его просто опустит, а IE прекрасно работает с совместно указаннми параметрами.
Вот как например у меня написано:
[HTML]
<style type="text/css">
#shadowColor{
background-color:#FF0000;
background: url('img/shadow.png');
background: expression('none');
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/shadow.png', sizingMethod='crop');
position: absolute;
margin-bottom: 30px;
height: 151px;
width: 121px;
z-index: 4;
}
</style>
[/HTML]
3.4K
18 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
Во-первых в коде ошибка:


Ошибка только здесь, в оригинали все нормально.

Еще раз скажу - забудем о стилях!!!!

2.8K
19 октября 2006 года
Unglued
119 / / 15.09.2005
:)

Забыли о стилях. А в чем тогда проблема и как ты собираешься менять тень в зависимости от браузера?

PS.: Чтобы найти ошибку в коде, надо убедиться, что каждая строчка работает именно так, как задумано. Для этого после каждой строки вызови alert(), а в качестве аргумента напиши то, что данная строка должна возвращать. Возможно, несколько криво описал, но надеюсь суть метода ясна.

PPS.: А нельзя ли еще раз задать вопрос, с описаниями всех моментов и подробностей?

PPPS.: А откуда ты вообще взял функцию setProperty()??? я такую впервые вижу. Это твой личный метод объекта "style"? у меня строка alert(document.getElementById('shadowColor').style.setProperty()) выдала ошибку: "Объект не поддерживает это свойство или метод."
3.4K
19 октября 2006 года
cogonet
198 / / 25.07.2006
О setProperty() уже тоже можно забыть - он не поддерживается IE поэтому и выдает ошибку ))

Задаю еще раз вопрос: есть картинка пнг! в зависимости от действий пользователя она (свойство background) изменяется - без перезагрузки старницы. нужно с помощью яваскрипт сделать варианты для разных браузеров (filter для IE). Без использования css файлов и тегов <style> - так как это слишком много кода! ))
2.8K
19 октября 2006 года
Unglued
119 / / 15.09.2005
Ок, легко тебе такое напишу, только скажи
Цитата:
в зависимости от действий пользователя она (свойство background) изменяется

изменяется, всмысле то появляется то исчезает? или что-то еще?

3.4K
19 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
или что-то еще?

Изменяется на другую!

3.4K
23 октября 2006 года
cogonet
198 / / 25.07.2006
Цитата:
легко тебе такое напишу


видать оказалось не так легко ... ))

2.8K
26 октября 2006 года
Unglued
119 / / 15.09.2005
меня небыло в сети, тема еще актуальна? ))
3.4K
26 октября 2006 года
cogonet
198 / / 25.07.2006
ну ты попробуй, а я посмотрю что получится.
2.8K
27 октября 2006 года
Unglued
119 / / 15.09.2005
Вот, как просил
[HTML]<html>
<head>
<title>Простенькая тень</title>
<script type="text/javascript">
var count = 0;
function changeBg(){
var shad = document.getElementById('shadow');
if(count == 0){
shad.style.background = "url('img/colortable/shadow_color2.png') no-repeat" ;
shad.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/colortable/shadow_color2.png', sizingMethod='crop')";
count = 1;
}
else{
shad.style.background = "url('img/colortable/shadow_color.png') no-repeat" ;
shad.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/colortable/shadow_color.png', sizingMethod='crop')";
count = 0;
}
}
</script>
</head>
<body>
<span style="color:#0000FF; cursor:pointer;" onclick="changeBg(count);">Click!</span>
<br /><br /><br />
<div style="position: absolute; height: 138px; width: 112px; margin-bottom: 30px; z-index: 5;">
<table width="112" height="133" border="1" cellpadding="1" cellspacing="0">
<tr><td align="center" bgcolor="#FFFFCC">Табличка с текстом</td></tr>
</table>
</div>
<div id="shadow" style="z-index: 4; height: 151px; width: 121px; position: absolute; margin-bottom: 30px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/colortable/shadow_color.png', sizingMethod='crop'); background: expression('none'); background: url('img/colortable/shadow_color.png') no-repeat;" ></div>
asdsaefwqefdwafggawe<br />
FasfqwfwqdfEfaerfewf<br />
fasdfsadfsadfadesfwF<br />
Asdfasfasdffasddsffa<br />
Asdfasasdfadadsfsdsf<br />
Dfasdfasdsdggaefwefd<br />
AsdfwaefasdwfsdfqweF<br />
asdfawefwesdfsdfssss<br />
</body>
</html>[/HTML]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог