• 締切済み

PC用jQueryをスマホ対応にするには。

初めて質問いたします。 初心者ですみません、困っています宜しくお願いいたします。 jQueryでブラインドをPCページに設置したところ動きましたが スマホではマウスでないためクリックしないとブラインドが反応しません。 jQueryモバイルがあると聞きましたがjavascriptのプログラムが分かりません。 可能であれば 下記のjsのプログラムの何処をどう変更を加えると PCのオンマウスとスマホのタッチ両方に対応・反応するのでしょうか。 お返事宜しくお願いいたします。 ******これ以降******* var slideMenu=function(){ var sp,st,t,m,sa,l,w,sw,ot; return{ build:function(sm,sw,mt,s,sl,h){ sp=s; st=sw; t=mt; m=document.getElementById(sm); sa=m.getElementsByTagName('li'); l=sa.length; w=m.offsetWidth; sw=w/l; ot=Math.floor((w-st)/(l-1)); var i=0; for(i;i<l;i++){s=sa[i]; s.style.width=sw+'px'; this.timer(s)} if(sl!=null){m.timer=setInterval(function(){slideMenu.slide(sa[sl-1])},t)} }, timer:function(s){s.onmouseover=function(){clearInterval(m.timer);m.timer=setInterval(function(){slideMenu.slide(s)},t)}}, slide:function(s){ var cw=parseInt(s.style.width,'10'); if(cw<st){ var owt=0; var i=0; for(i;i<l;i++){ if(sa[i]!=s){ var o,ow; var oi=0; o=sa[i]; ow=parseInt(o.style.width,'10'); if(ow>ot){oi=Math.floor((ow-ot)/sp); oi=(oi>0)?oi:1; o.style.width=(ow-oi)+'px'} owt=owt+(ow-oi)}} s.style.width=(w-owt)+'px'; }else{clearInterval(m.timer)} } }; }();

みんなの回答

回答No.3

どちらでもいけますよ。 if(スマホなら){  ontouchstart=処理A_1; }else{  onmouseover=処理A_2 } ontouchstart=onmouseover=function(){  if(スマホなら){   処理A_1実行;  }else{   処理A_2実行;  } } >もう一つスマホ用を.jsとしてupすれば可能なのでしょうか? 作り方に合わせてください。 CGIやSSI、.htaccessで分岐させるなら、スマホにPC用スクリプトを読ませるのは無意味ですし、分割した方が個々のファイルサイズは減らせますね。 サーバーの処理の仕方がわからないから全部JavaScriptで、というのなら、全部1つにまとめるのも手だと思いますし、 環境に合わせたファイルだけを動的に(JavaScriptで)読み込むのも手だと思います。 共通部分が少ない場合に、その共通部分をライブラリとして別途ダウンロードさせた場合、逆に通信データ総量が増える可能性もありますが、その辺の調整は方針次第でしょう。 やりかたがわからなければ、わかる範囲で作ればいいと思います。

jQuery
質問者

補足

var ua = navigator.userAgent; if ( ua.indexOf('iPhone') != -1 || ua.match(/.*Android.*Mobile.*/) || ua.indexOf('Windows Phone') != -1 ) { スマホ用 } else { PC用 } if条件分岐で判別ですが、試みましたがうまくいきませんでした。 スマホのタッチに反応するのですが 直ぐに離すとリンク先に飛んでしまう /* スマホ用 */ var slideMenu_05=function(){ /*上記の箇所slideMenu_02部分*/ var sp,st,t,m,sa,l,w,sw,ot; return{ build:function(sm_05,sw,mt,s,sl,h){ sp=s; st=sw; t=mt; m=document.getElementById(sm_05); sa=m.getElementsByTagName('li'); l=sa.length; w=m.offsetWidth; sw=w/l; ot=Math.floor((w-st)/(l-1)); var i=0; for(i;i<l;i++){s=sa[i]; s.style.width=sw+'px'; this.timer(s)} if(sl!=null){m.timer=setInterval(function(){slideMenu_05.slide(sa[sl-1])},t)} }, timer:function(s){s.ontouchstart=function(){ /*          ↑変更 */ clearInterval(m.timer);m.timer=setInterval(function(){slideMenu_05.slide(s)},t)}}, slide:function(s){ var cw=parseInt(s.style.width,'10'); if(cw<st){ var owt=0; var i=0; for(i;i<l;i++){ if(sa[i]!=s){ var o,ow; var oi=0; o=sa[i]; ow=parseInt(o.style.width,'10'); if(ow>ot){oi=Math.floor((ow-ot)/sp); oi=(oi>0)?oi:1; o.style.width=(ow-oi)+'px'} owt=owt+(ow-oi)}} s.style.width=(w-owt)+'px'; }else{clearInterval(m.timer)} } }; }(); 修正or追加の部分が 不明です。 引き続きご教授下さい。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

やろうと思えば出来ます。 1日経ってるので製作中に気づいかれたと思いますが、 ontouchmoveでスクロールしますから、スクロールを止める処理が必要です。 使いやすさや作りやすさは一長一短有りますが、 アップルも言っているように、使いやすい物を作るには制作者が苦労することになり、制作者が楽をすれば使用者が苦労することになります。 使いやすい物を作るには、コードは複雑になるのはしようがないと思います。

jQuery
質問者

補足

お返事有難う御座います、お手間をおかけしてすみません。 iPhone/iPadではonmouseoverやonmousedownなどのonMouse系のイベントが利用できず、代わりにontouchstartやontouchmove、ontouchendなどのonTouch系のイベントが用意されています。 使い分けとしてはだいたい次のようになります。 ontouchstart = onmousedown ontouchmove = onmousemove ontouchend ≒onmouseup 同じプログラム上に記述するのが困難であれば もう一つスマホ用を.jsとしてupすれば可能なのでしょうか? 基本的なことですが、その場合PC/スマホ/iPhone/iPadを特定してそれ以外には適用せずにそれぞれに対し専用のプログラムを記述が必要になるのでしょう。 そこをスマートに兼用にこだわっています、すみませんが宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

スマホにはマウスは有りませんから、onmouseoverやonmouseoutの概念そのものがありません。 (ある条件で動きますがその条件が厳しいので、動かないと考えた方が楽です。) onclickだけで処理するように作り直せば、スマホでもうまく動くようになります。 jQuery mobileはJavaScriptライブラリではなく、スマホサイト用の『デザインテンプレート』です。 「JavaScriptライブラリ」を使う場合は、スマホでも『jQuery』を使用してください。 (デザインテンプレートにjQueryが入っているので、デザインテンプレートからそのままjQueryも使えますけどね。。。)

jQuery
質問者

補足

質問者です。素早い対応有難う御座います。 PC&スマホ兼用にするため、素人的に考えて onmouseoverがスマホ用のタッチ開始時のイベントontouchstartに onmouseoutがスマホ用のontouchendのようにスマホと兼用できるプログラムにすることは不可能でしょうか。 またはもっと賢くスマートな方法があれば具体的にご教授下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JavaScriptエラーが出ます…

    2つのJavaScriptエラーが出て大変困っております。 どなたか分かる方いらっしゃいませんでしょうか? ※当方はJavaScriptは分かりません。 検索にて調査いたしましたが、情けないですがもうお手上げ状態です。 ▼1つめ----------------------------------------------▼ メッセージ: 'null' は Null またはオブジェクトではありません。 ライン: 8 文字: 3 コード: 0 コード内容 以下 var accordion=function(){ var tm=10; var sp=10; function slider(n){ this.nm=n; this.arr=[]; this.sel='' } slider.prototype.init=function(t,c,k){ var a,h,s,l,i; a=document.getElementById(t); h=a.getElementsByTagName('dt'); s=a.getElementsByTagName('dd'); l=h.length; for(i=0;i<l;i++){ var d=h[i]; this.arr[i]=d; d.onclick=new Function(this.nm+".process(this)"); if(k!=null&&c==i){this.sel=d.className=k} } l=s.length; for(i=0;i<l;i++){ var d=s[i]; d.maxh=d.offsetHeight; if(c!=i){d.style.height='0'; d.style.display='none'} } } slider.prototype.process=function(d){ var i,l; l=this.arr.length; for(i=0;i<l;i++){ var h=this.arr[i]; var s=h.nextSibling; if(s.nodeType!=1){s=s.nextSibling} clearInterval(s.timer); if(h==d&&s.style.display=='none'){ s.style.display=''; setup(s,1); h.className=this.sel} else if(s.style.display==''){setup(s,-1); h.className=''} } } function setup(c,f){c.timer=setInterval(function(){slide(c,f)},tm)} function slide(c,f){ var h,m,d; h=c.offsetHeight; m=c.maxh; d=(f==1)?Math.ceil((m-h)/sp):Math.ceil(h/sp); c.style.height=h+(d*f)+'px'; c.style.opacity=h/m; c.style.filter='alpha(opacity='+h*100/m+')'; if(f==1&&h>=m){clearInterval(c.timer)} else if(f!=1&&h==1){c.style.display='none'; clearInterval(c.timer)} } return{slider:slider} }(); ▲1つめここまで----------------------------------------------▲ ▼2つめ----------------------------------------------▼ メッセージ: 'obj.length' は Null またはオブジェクトではありません。 ライン: 238 文字: 10 コード: 0 コード内容 以下 http://www.myulond.com/js.txt ▲1つめここまで----------------------------------------------▲ どうぞ、ご教授よろしくお願いいたします。

  • jQueryの関数から変数を取得

    次のうち変数valを取得してこれとは別の関数で利用したいのですが、どうやればこの変数を取得出来るのでしょうか? 単純な関数だと関数名を付けて戻り値にvalを指定してそれを呼び出してあげれば良いと思うのですが、この場合はどうしたら良いのか分からず頭を悩ませています。 var timer = false; var replaceWidth = 320; var prefWidth = parseInt( $( window ).width() ); $( window ).resize( function () { if( timer !== false ) { clearTimeout( timer ); } timer = setTimeout( function () { var self = $( this ); var windowWidth = parseInt( $( window ).width() ); if( windowWidth <= replaceWidth && replaceWidth < prefWidth ) { var val = 1; } else if( replaceWidth < windowWidth && prefWidth <= replaceWidth ) { var val = 10; } prefWidth = windowWidth; }, 200 ); });

  • jquery cycleで画像リサイズ

    jquery cycle pluginを使用して、画像のスライドをしています。 画像を画面中央に全画面表示をしたいのですが、 スライドする画像のサイズがそれぞれ異なるため、 画像の比率を固定して、縦横のサイズで大きい方を 画面に合わせて表示したいのです。 私が考えたのは、 (全文は載せられません。すみません。) <div id="slideImage"> <img id="slide1" src="test01.gif"> <img id="slide2" src="test02.gif"> ・・・ <img id="slide5" src="test05.gif"> </div> ↑のようにスライドする画像があるとして、 下記のjavascriptでスライドする画像分ループさせて、 id部分を変数にして、縦横どちらかが大きかったら・・・という 計算をしています。 function resize(){ for(var i=1; i<6; i++){ var slideNo = "slide" + i; var w = document.getElementById(slideNo).width; var h = document.getElementById(slideNo).height; if(w >= h){ document.getElementById(slideNo).width = screen.width; }else{ document.getElementById(slideNo).height = screen.height; } } } 確かにこれだとidがslide1の場合はサイズをリサイズしてくれるのですが、 slide2以降をリサイズしてくれません。 ループは確かに回っているし、 if文の前でリサイズ前の画像サイズをちゃんと取得しているのですが、 なぜかscreen.width(screen.height)の値が入ってくれません。 jquery cycle pluginだとそれぞれの画像のリサイズはできないのでしょうか。 みなさんお力お貸しください!!

  • アコーディオンメニューの高さの調節がわかりません

    アコーディオンメニューを設置したのですか、開いた時にすべてが表示されずに下部がきれてしまします。 どこかに高さを制限しているところがあるのでしょうか? 知識が無く、いろいろ調べてみたりしたのですがわかりません。 どなたか教えていただけませんでしょうか? -------------script.js---------------- var accordion=function(){ var tm=sp=10; function slider(n){this.nm=n; this.arr=[]} slider.prototype.init=function(t,c,k){ var a,h,s,l,i; a=document.getElementById(t); this.sl=k?k:''; h=a.getElementsByTagName('dt'); s=a.getElementsByTagName('dd'); this.l=h.length; for(i=0;i<this.l;i++){var d=h[i]; this.arr[i]=d; d.onclick=new Function(this.nm+'.pro(this)'); if(c==i){d.className=this.sl}} l=s.length; for(i=0;i<l;i++){var d=s[i]; d.mh=d.offsetHeight; if(c!=i){d.style.height=0; d.style.display='none'}} } slider.prototype.pro=function(d){ for(var i=0;i<this.l;i++){ var h=this.arr[i], s=h.nextSibling; s=s.nodeType!=1?s.nextSibling:s; clearInterval(s.tm); if(h==d&&s.style.display=='none'){s.style.display=''; su(s,1); h.className=this.sl} else if(s.style.display==''){su(s,-1); h.className=''} } } function su(c,f){c.tm=setInterval(function(){sl(c,f)},tm)} function sl(c,f){ var h=c.offsetHeight, m=c.mh, d=f==1?m-h:h; c.style.height=h+(Math.ceil(d/sp)*f)+'px'; c.style.opacity=h/m; c.style.filter='alpha(opacity='+h*100/m+')'; if(f==1&&h>=m){clearInterval(c.tm)}else if(f!=1&&h==1){c.style.display='none'; clearInterval(c.tm)} } return{slider:slider} }(); ----------------------------------------- -----------style.css-------------------------- * {margin:0; padding:0} #accordion2 {width:180px; margin:10px auto; border:0px solid #000; border-top:none} .accordion2 {width:180px; font:10px Verdana,Arial; color:#fff} .accordion2 dt {width:180px; border-top:0px solid #333} .accordion2 dt:hover {background-color:#fff} .accordion2 .open {background-color:#fff} .accordion2 dd {overflow:hidden; background:#fff} .accordion2 span {display:block; width:180px; border-top:none; padding:0px} ----------------------------------------

  • jQueryリサイズ処理と記述でご指摘ください。

    jQueryプラグインで、「mLivre」というプラグインを使っております。 ※mLivre:[JS]雑誌をめくるようにぺらっと画像を表示するスクリプト http://coliss.com/articles/build-websites/operation/javascript/jquery-plugin-mlivre.html 「mLivre」は画像をめくるように表示してくれるプラグインです。 このプラグインをレスポンシブにしたいと思い、リサイズ命令でブラウザサイズに合わせて 大きさを変えていきたいと思っております。 現時点で画像の表示自体はリサイズ出来ておりますが、 ページをめくる動作でアニメーションの表示が上手くいきません。 一番初めの数値(ページを開いた時点での数値)を記憶しているのか、 一番初めに表示されていた場所から画像がめくられてしまいます。 (説明が下手で申し訳ございません) 素人で恐縮ですが、私の記述で間違っているところがあり 私自身、間違いに気付けない状態です。 下記にコードを記述いたしました。 ご指摘いただければと思います。 ---------「mLivre」呼び出し部---------- jQuery(function() { var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; setSize(); jQuery('#slide').mLivre({ pageDefault:0, over:true, loader:true, eventLoad:null, eventOpen:null, width:setWi, height:setHi, dossier:'http://URL/images/slide/', //画像 }); function setSize() { //画像サイズ指定 imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); } }); ------「mLivre」コア部---------- //11行目はじまり (function(jQuery) { jQuery.fn.mLivre = function(options,num) { switch (options) { //switch部 略 // break; } //↓追加したリサイズ部 jQuery(window).resize(function(){ var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); opts.width = setWi; opts.height = setHi; jQuery(".mLivre").width(setWi); //プラグインの大きさ jQuery(".mLivre").height(setHi); }); }); //↓元々の記述、変更していません var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); //省略 })(jQuery); var mLivre={ //ここからが処理部(アニメーション)だと思います。(変更していません) progress:false, //省略 }); } }

  • jQuery開閉式のメニュー実装について

    jQueryにて開閉式のメニューを、下記jsを使用し実装したいと思ってるのですが、 下記jsだと、右側から表示するようになっています。 これを左側から表示するようには、js及びcssをどう修正すれば、 実現できるようになりますでしょうか? あと、デフォルトで「開いた」状態にする場合もどう修正すればよろしいでしょうか。 ■javascript <script type="text/javascript"> $(document).ready(function(){ var panel_DefW = $("#slide_panel").width(); var btn_DefW = 20; $('#slide_panel').width(btn_DefW); $('.menu_off').click(function() { if($("#slide_panel").width() > btn_DefW){ w = btn_DefW; }else{ w = panel_DefW; } $("#slide_panel").animate({ width: w }, "slow", function(){ $('.menu_off').toggleClass('active'); }); }); }); </script> ■html <div id="slide_panel"> <div class="wrap menu_off"> <div class="panel_main"> <h2>メニュー</h2> <ul> <li><a href="#">リストメニュー1</a></li> <li><a href="#">リストメニュー2</a></li> </ul> </div> </div> </div> ■css #slide_panel{ position: absolute; top:200px; right:0; margin: 0; padding: 0 0 0 0; width:220px; height: auto; cursor: pointer; overflow: hidden; } #slide_panel .wrap{ width: 220px; overflow:hidden; 以上になります。 誰かお分かりになる方がいらしましたらお願い致します。

  • jQueryの記述についてご指摘ください。

    jQuery初心者で大変恐縮ですが、質問させていただきました。 「mLivre」というプラグインを使用しております。(下記URLを参照ください) ※参考サイト 雑誌をめくるようにぺらっと画像を表示するスクリプト -mLivre http://coliss.com/articles/build-websites/operation/javascript/jque... このプラグインは本をめくるように画像を表示してくれるプラグインです。 レスポンシブでも動くようにしたいと思い、コードを記述してみました。 画像自体はレスポンシブになりましたが、プラグインの動作が少しおかしくなってしまいました。 リサイズすると、めくる様な動作をしてくれますが、画像が切り替わらなくなってしまいました。 原因は、リサイズ時に画像の枚数のカウントがおかしくなっているせいだと思いますが、 どう変えればいいのかわからずに困っております。 「mLivre.js」自体はいじっておりません。 スクリプト実行部分に記述を追記いたしました。 下記にコードを記述いたしましたので、もしよろしければご指摘いただければと 思います。 よろしくお願いいたします。 ------------コード--------------- jQuery(document).ready(function() { var imgW; var imgH; var winW; var scaleW; var setW; var setH; setSize(); //リサイズしたら実行 jQuery(window).resize(function(){ setSize(); }); function setSize() { //元の画像サイズ指定 imgW = 500; imgH = 375; //横幅に合わせて縦幅の調整 winW = jQuery( '#page' ).width(); scaleW = winW / imgW; setW = winW; setH = imgH * scaleW; //要素の画像サイズ jQuery("#slide img").width(setW); jQuery("#slide img").height(setH); //実行部分 jQuery('#slide').mLivre({ width:setW, height:setH, dossier:'http:/画像のURL/images... }); } });

  • 無限ループ

    教えてください。 画面をリサイズすると画面再表示するようにしたいのですが、 下記のソースでは IE8で無限ループになります。 どこがおかしいのでしょうか? どのように直せばいいのでしょうか? jQuery(document).ready(function () { var timer = false; $(window).on("load resize", ReLayout); function ReLayout(event) { var _width = $(window).width(); var winWidth_resized; if(event.type == 'resize') { if (_width > 767) { if (timer !== false) { clearTimeout(timer); } timer = setTimeout( disp, 200); } } } function disp(){ location.href = location.href; } });

  • jQueryでアコーディオンメニュー

    jQueryのaccordionでメニューを作っています。 初期のページは大項目1~3がアコーディオンで開閉し、 開いた中にある小項目がリンクボタンになっています。 【HTML 1】 小項目1(index_01.html)では、大項目1が開いたままになり、 大項目2、3のみアコーディオンで開閉します。【HTML 2】 ここからがご教示頂きたいところで、 小項目2(index_02.html)を表示している時は 大項目2が開いたままで、大項目1、3をアコーディオンさせたいと考えております。 【HTML 3】 アコーディオンではさむ形になるので、新しいid「slider2」を作りましたが、 お互いが開いたままの状態になってしまうのが難点です。 解決案として、「slider」で大枠を囲み、アコーディオンに左右されないddを作るか、 「slider」と「slider2」を同期させてどちらか片方が開いている時は片方が閉じるように する・・・と考えています。 ★印の部分のfor文に手を加えるのではないかと思うのですが、 どうにもお手上げです・・・ お手すきの方、どうかお力添え下さい よろしくお願い致します。 //______jQuery______// var accordion=function(){ var tm=sp=10; function slider(n){this.nm=n; this.arr=[]} slider.prototype.init=function(t,c,k){ var a,h,s,l,i; a=document.getElementById(t); this.sl=k?k:''; h=a.getElementsByTagName('dt'); s=a.getElementsByTagName('dd'); this.l=h.length; ★for(i=0;i<this.l;i++){var d=h[i]; this.arr[i]=d; d.onmouseover=new Function(this.nm+'.pro(this)'); if(c==i){d.className=this.sl}} l=s.length; for(i=0;i<l;i++){var d=s[i]; d.mh=d.offsetHeight; if(c!=i){d.style.height=0; d.style.display='none'}} } slider.prototype.pro=function(d){ for(var i=0;i<this.l;i++){ var h=this.arr[i], s=h.nextSibling; s=s.nodeType!=1?s.nextSibling:s; clearInterval(s.tm); if(h==d&&s.style.display=='none'){s.style.display=''; su(s,1); h.className=this.sl} else if(s.style.display==''){su(s,-1); h.className=''} } } function su(c,f){c.tm=setInterval(function(){sl(c,f)},tm)} function sl(c,f){ var h=c.offsetHeight, m=c.mh, d=f==1?m-h:h; c.style.height=h+(Math.ceil(d/sp)*f)+'px'; c.style.opacity=h/m; c.style.filter='alpha(opacity='+h*100/m+')'; if(f==1&&h>=m){clearInterval(c.tm)}else if(f!=1&&h==1){c.style.display='none'; clearInterval(c.tm)} } return{slider:slider} }(); //______HTML 1______// <div id="accordion"> <dl class="accordion" id="slider"> <dt>▼大項目1</dt> <dd> <span class="bank_top"><a href="index_01.html">小項目1</a></span> </dd> <dt>▼大項目2</dt> <dd> <span><a href="index_02.html">小項目2</a></span> </dd> <dt>▼大項目3</dt> <dd> <span><a href="index_03.html">小項目3</a></span> </dd> </dl> </div> //______HTML 2______// <div id="accordion"> <dl class="accordion"> <dt>▼大項目1</dt> <dd> <span class="bank_top"><a href="index_01.html">小項目1</a></span> </dd> <dl class="accordion" id="slider"> <dt>▼大項目2</dt> <dd> <span><a href="index_02.html">小項目2</a></span> </dd> <dt>▼大項目3</dt> <dd> <span><a href="index_03.html">小項目3</a></span> </dd> </dl> </div> //______HTML 3______// <div id="accordion"> <dl class="accordion" id="slider"> <dt>▼大項目1</dt> <dd> <span class="bank_top"><a href="index_01.html">小項目1</a></span> </dd> </dl> <dl class="accordion"> <dt>▼大項目2</dt> <dd> <span><a href="index_02.html">小項目2</a></span> </dd> <dl class="accordion" id="slider2"> <dt>▼大項目3</dt> <dd> <span><a href="index_03.html">小項目3</a></span> </dd> </dl> </div> <script type="text/javascript"> var slider1=new accordion.slider("slider1"); slider1.init("slider"); var slider2=new accordion.slider("slider2"); slider2.init("slider2"); </script>

  • アコーディオンのフォントがIEのみ適用にならない

    以下のソースなのですが、Firefox/Operaはスタイルシート指定のメイリオ表示なのですが、 IE8で閲覧すると文字がぼやけて表示されます。どこに原因があるでしょうか? よろしくお願いいたします --- var accordion=function(){ var tm=sp=10; function slider(n){this.nm=n; this.arr=[]} slider.prototype.init=function(t,c,k){ var a,h,s,l,i; a=document.getElementById(t); this.sl=k?k:''; h=a.getElementsByTagName('dt'); s=a.getElementsByTagName('dd'); this.l=h.length; for(i=0;i<this.l;i++){var d=h[i]; this.arr[i]=d; d.onclick=new Function(this.nm+'.pro(this)'); if(c==i){d.className=this.sl}} l=s.length; for(i=0;i<l;i++){var d=s[i]; d.mh=d.offsetHeight; if(c!=i){d.style.height=0; d.style.display='none'}} } slider.prototype.pro=function(d){ for(var i=0;i<this.l;i++){ var h=this.arr[i], s=h.nextSibling; s=s.nodeType!=1?s.nextSibling:s; clearInterval(s.tm); if(h==d&&s.style.display=='none'){s.style.display=''; su(s,1); h.className=this.sl} else if(s.style.display==''){su(s,-1); h.className=''} } } function su(c,f){c.tm=setInterval(function(){sl(c,f)},tm)} function sl(c,f){ var h=c.offsetHeight, m=c.mh, d=f==1?m-h:h; c.style.height=h+(Math.ceil(d/sp)*f)+'px'; c.style.opacity=h/m; c.style.filter='alpha(opacity='+h*100/m+')'; if(f==1&&h>=m){clearInterval(c.tm)}else if(f!=1&&h==1){c.style.display='none'; clearInterval(c.tm)} } return{slider:slider} }(); var slider1=new accordion.slider("slider1"); slider1.init("slider"); var slider2=new accordion.slider("slider2"); slider2.init("slider2",0,"open"); var slider3=new accordion.slider("slider3"); slider3.init("slider3",0,"open");