• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IEでもFirefoxでも動作する点滅文字について)

IEでもFirefoxでも動作する点滅文字について

このQ&Aのポイント
  • Internet ExplorerでもFirefoxでも動作する点滅文字を作成する方法について知りたいです。
  • Internet Explorer7では動作するものの、Firefox3.6では動作しない点滅文字の問題が発生しています。
  • 点滅時間を設定できる方法や、複数の箇所に設定できる方法を教えてください。MARQUEEタグでは位置あわせがうまくできませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

もくししてわかるなら、てきとうなぶひんもそろっていると・・ <!DOCTYPE html> <title></title> <body> <h1>  <span class="a">点</span>  <span class="b">滅</span>  <span class="a">サ</span>  <span class="b">ン</span>  <span class="a">プ</span>  <span class="b">ル</span> </h1> <script type="text/javascript"> var Blinker = function ( viewTime, hiddenTime ) {  this.timerId = null;  this.buf = [ ];  this.viewTime = viewTime;  this.hiddenTime = hiddenTime;  this.mode = false;  this.start(); }; Blinker.prototype.view = function ( ) {  for( i = 0, I = this.buf.length; i < I; i++ )   this.buf[i].style.visibility = 'visible'; }; Blinker.prototype.hide = function ( ) {  for( i = 0, I = this.buf.length; i < I; i++ )   this.buf[i].style.visibility = 'hidden'; }; Blinker.prototype.start = function ( ) {  this.timerId && this.stop();  this.loop(); }; Blinker.prototype.loop = function ( ) {  this.mode ? this.view(): this.hide();  this.timerId = setTimeout( (function ( that ) {   return function ( ) { that.loop(); }; })( this ),   this.mode ? this.viewTime: this.hiddenTime );  this.mode = ! this.mode; }; Blinker.prototype.stop = function ( ) {  this.timerId && clearInterval( this.timerId );  this.timerId = null; }; Blinker.prototype.add = function ( n ) {  n && this.buf.push( n ); }; Blinker.create = function ( viewTime, hiddenTime ) {  var obj = new Blinker ( viewTime, hiddenTime || viewTime );  var arg = 2, id, n;  while( id = arguments[ arg++ ] ) {   n = document.getElementById( id );   n && obj.add( n );  }  return obj; }; Blinker.createByClassName = function ( cssName, viewTime, hiddenTime ) {  var obj = new Blinker ( viewTime, hiddenTime || viewTime );  var allNode = document.getElementsByTagName( '*' );  var reg = new RegExp( '(?:^|\\s)' + cssName + '(?:$|\\s)' );  var cnt = 0, n;  while( n = allNode[ cnt++ ] )   if( n.className && reg.test( n.className ) )    obj.add( n );  return obj; }; var str1 = Blinker.createByClassName( 'a', 400 ); var str2 = Blinker.createByClassName( 'b', 200 ); </script>

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースを試してみたところ、 意図した動作をしている事を確認しました。 【index.html】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>title</title> </head> <body> <h1> <span class="a">点</span> <span class="b">滅</span> <span class="a">サ</span> <span class="b">ン</span> <span class="a">プ</span> <span class="b">ル</span> </h1> <p class="a">テスト1</p> <p class="a">テスト2</p> <p class="a">テスト3</p> <script type="text/javascript" src="blink.js"></script> </body> </html> 【blink.js(ご教示いただいたjavascriptをそのまま貼り付けました。)】 var Blinker = function ( viewTime, hiddenTime ) { 略 var str2 = Blinker.createByClassName( 'b', 200 ); そのたびはどうもありがとうございました。 以上、よろしくお願いします。

その他の回答 (2)

回答No.2

こういうのは、どうかな?ばぶぅ~ ぜんかくくうはくもじは、はんかくにしてちょ! <!DOCTYPE html> <title></title> <body> <h1>  <span id="a0">点</span>  <span id="a1">滅</span>  <span id="a2">サ</span>  <span id="a3">ン</span>  <span id="a4">プ</span>  <span id="a5">ル</span> </h1> <p>これは普通の文書</p> <p id="b0">これは点滅する文章</p> <script type="text/javascript"> //@cc_on var Blinker = function ( viewTime, hiddenTime ) {  this.timerId = null;  this.buf = [ ];  this.viewTime = viewTime;  this.hiddenTime = hiddenTime;  this.mode = false;  this.start(); }; Blinker.prototype.view = function ( ) {  for( i = 0, I = this.buf.length; i < I; i++ )   this.buf[i].style.visibility = 'visible'; }; Blinker.prototype.hide = function ( ) {  for( i = 0, I = this.buf.length; i < I; i++ )   this.buf[i].style.visibility = 'hidden'; }; Blinker.prototype.start = function ( ) {  this.timerId && this.stop();  this.loop(); }; Blinker.prototype.loop = function ( ) {  this.mode ? this.view(): this.hide();  this.timerId = setTimeout( (function ( that ) {   return function ( ) { that.loop(); }; })( this ),   this.mode ? this.viewTime: this.hiddenTime );  this.mode = ! this.mode; }; Blinker.prototype.stop = function ( ) {  this.timerId && clearInterval( this.timerId );  this.timerId = null; }; Blinker.prototype.add = function ( n ) {  n && this.buf.push( n ); }; Blinker.create = function ( viewTime, hiddenTime ) {  var obj = new Blinker ( viewTime, hiddenTime || viewTime );  var arg = 2, id, n;  while( id = arguments[ arg++ ] ) {   n = document.getElementById( id );   n && obj.add( n );  }  return obj; }; //____________________ var str1 = Blinker.create( 200, 100, 'a0', 'a2', 'a4' ); var str2 = Blinker.create( 400, 200, 'a1', 'a3', 'a5' ); var str3 = Blinker.create( 1000, 500, 'b0' ); </script> </body> </html>

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースを目視したところ、 想定動作の 2 が満たされていないようでした。 【1】 私の環境では、現状 id 名が固定になってしまう為です (id を振る部分のプログラムを動的にして a + 連番 という形にできれば 使えるかも知れませんが)。  <span id="a0">点</span>  <span id="a0">滅</span>  <span id="a0">サ</span>  <span id="a0">ン</span>  <span id="a0">プ</span>  <span id="a0">ル</span> 【2】 下記のソースからは id の数が固定のような印象を受けました。 var str1 = Blinker.create( 200, 100, 'a0', 'a2', 'a4' ); var str2 = Blinker.create( 400, 200, 'a1', 'a3', 'a5' ); var str3 = Blinker.create( 1000, 500, 'b0' ); 私の環境では、ページ毎に点滅する数が異なり、 数個の場合もあれば、数十個の場合もあり、 何個になるかはデータに依存しています。 以上、よろしくお願いします。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

最初の document.all で思いっきり return しちゃってるのでは? とりあえずの応急処置 function blink() { //if (!document.all) { return; } var all = document.getElementsByTagName('*'); for (i = 0; i < all.length; i++) { obj = all[i]; ---以下そのまま--- しかし、毎回全部の中から探すというのもねぇ…

iroha_168
質問者

お礼

ご回答ありがとうございます。 意図した動作をしている事を確認しました。 応急処置との事ですが、とりあえずご教示いただいたソースで進めていこうと思います。 どうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A