• 締切済み

ブロック要素の横スクロールバーのカスタマイズ(画像)

既に質問を書きましたがつまづいているので書き直します。 ブロック要素の横スクロールバーを画像にしたいです。 http://www.apple.com/jp/mac/ の上のメニューみたいに横にスライドし、スクロールバーを画像にしたいのです。 ボタンをクリックして任意の位置に飛ぶスライドはすでにすでにできています。 スクロールバーを動かすと、ブロック要素のなかをスクロールすることができましたが、以下の方法がわかりません。 1. スクロールバーを中央揃えの幅の決まったエリア内だけを移動させたい。 (スクロールバーをクリックするとウィンドウの一番左にいってからマウスストーカーしはじめ、かつ、またウィンドウをクリックしないとマウスストーカーが終了しない。) 2. スライドバー以外のスライドエリアをクリックするとそこにスライドバーがスライドインするようにしたい。 3. アンカーに飛ばすボタンをクリックし任意の位置にスライドする際、スライドバーも同期させたい。 現在の記述は以下の通りです。 <script language="JavaScript"> var timeout; var x = 0; var step = 5; var icoX = 0; // アイコンの位置 var mouX = 0; // マウスの位置 function down(){ if (x < 0){x=0;} var e=document.getElementById("scrollarea"); if(e.scrollLeft<e.scrollWidth-e.offsetWidth){ sbar.style.pixelLeft=x; e.scrollLeft = x; x = x + step; timeout=setTimeout("down()",2); } } function up(){ if (x >=0 ){ document.getElementById("scrollarea").scrollLeft = x; sbar.style.pixelLeft=x; x = x - step; } timeout=setTimeout("up()",2); } document.onmousemove = onMouseMove; function onMouseMove(e) { mouX = event.clientX; } function onTimer() { icoX += (icoX < mouX) ? 1 : -1; sbar.style.left = icoX + "px"; document.getElementById("scrollarea").scrollLeft = sbar.style.pixelLeft; timeout=setTimeout("onTimer()",2); } function stop1(){ clearTimeout(timeout); } document.onmouseup=stop1; </script> //bodyタグの中のスライドを実装したい部分 <div id="my-glider"> <div class="scroller" style="height: 188px; width:864px;overflow:hidden;" id="scrollarea"> //ここに内容がはいります。長いので省略します。 <table width="860" height="16" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="16"><img src="images/left.gif" width="16" height="16" onMouseDown="up()"></td> <td width="828" bgcolor="#666666"><div id="sbar" style="position:absolute;margin-top:-8px;"><img src="images/hscrollerdex.png" width="100" height="15" onMouseDown="onTimer()" onMouseUp="stop1();"></div></td> <td width="16"><img src="images/right.gif" width="16" height="16" onMouseDown="down()"></td> </tr> </table> </div> </div> javascript初心者です・・・。 アドバイスよろしくおねがいします。

みんなの回答

  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.1

いきなりですが、申し訳ありません。 以前のアドバイスが少々ずれていた(不足しすぎた)かもしれません。 今回実際に作ってみてそう思いました。 #文中のスクロールバーとスライドバーというのは同じでしょうか・・・? #後、少々、質問の意図とずれてるかもしれませんが回答させていただきます。 以下のソースで1と2に関しては解決できていると思います。 かなり手抜きの為、参考程度に見ていただけるといいと思います。 手法変更の為、JavaScript部分は完全に置き換えました。 -- JavaScript ----------------- // バーの移動開始 function startMoveBar(){ // バー var objSBar = document.getElementById("sbar"); // バーの移動するレール var objSBarRail = document.getElementById("sbarRail"); // マウス座標(IEのみです。必要に応じて他ブラウザを対応させてください) var mouseX = document.body.scrollLeft + event.clientX; // バーの位置を変更 objSBar.style.posLeft = (mouseX - (objSBar.width / 2)); // バーが左に行きすぎないように if(objSBar.style.posLeft < 0){ objSBar.style.posLeft = 0; // バーが右に行きすぎないように([レールの幅]-[バーの幅]が、バーのX座標最大値とする) }else if(objSBar.style.posLeft > objSBarRail.width - objSBar.width){ objSBar.style.posLeft = objSBarRail.width - objSBar.width; } // タイマーではなく、onmousemoveで移動 document.onmousemove = startMoveBar; } // バーの移動終了 function stopMoveBar(){ // onmousemoveなどをあまりつかわないので、これで正しいか不明、 // ちょっと調べてみてください・・・ document.onmousemove = ""; } // 画面のonmouseupでバーの移動終了 document.onmouseup=stopMoveBar; ------------------------- HTMLの細かいスタイルは調整してください。 -- HTML ----------------- <!--bodyタグの中のスライドを実装したい部分--> <div id="my-glider"> <div class="scroller" style="height: 188px; width:864px;overflow:hidden;" id="scrollarea"> <!--ここに内容がはいります。長いので省略します。--> <table width="860" height="16" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="16"><img src="images/left.gif" width="16" height="16" onMouseDown="up()"></td> <!-- バーのレールにID付与 --> <!-- 座標スタイルほしいので、position追加 --> <!-- レール上クリックでも移動するようにonMouseDownを追加 --> <td id="sbarRail" width="828" bgcolor="#666666" style="position:relative;left:0px;" onMouseDown="startMoveBar()"> <!-- imgタグだと、ドラッグがうまくいかないので、inputのtype="image"に変更 --> <!-- positionを絶対座標から相対座標に変更 --> <!-- onMouseDownとonMouseUpを削除 --> <input type="image" src="hscrollerdex.png" width="100" height="15" id="sbar" style="position:relative;left:0px;"> </td> <td width="16"><img src="images/right.gif" width="16" height="16" onMouseDown="down()"></td> </tr> </table> </div> </div> -------------------------

関連するQ&A

  • tableで横スクロールバーが・・

    tableの高さがブラウザの表示範囲を超えると 少しだけ右の方に空白ができ、 横スクロールバーが出てきて醜い状態になってしまいます。 タグは、大まかにこのような感じで、 外部スタイルシートを適用させていて、 tableには枠線をつけています。 <body scroll="auto"> <table style="width:720px;" class="枠線、パディング、マージン等"> <tr> <td colspan="2" style="background-image:url("***.jpg(720x150pxの画像)"); width:720px;height:150px;"> <a href="リンク">リンク</a> </td> </tr> <td colspan="1" width="100%"> <!メニュー部分> </td> <td colspan="1"> <!本文部分> </td> </tr> <tr> <td> <!著作権表示> </td> </tr> </table> </body> 本文が少なければ、tableの高さがブラウザの表示範囲の中に収まるので 横スクロールバーは出ませんが、 収まらないときには横スクロールバーが出てしまいます。 横スクロールバーを出さないようにするにはどうすればよいのでしょうか? 分かりにくい箇所があればご指摘をお願いします。 回答をお待ちします。

    • ベストアンサー
    • CSS
  • スクロールするテーブルに背景画像を固定させたいのです

    HTMLでテーブルを作り、スクロールできる仕様にしました。そこに背景画像を入れたのですが、スクロールの際に一緒に背景画像もスクロールしてしまいます。 文字などだけをスクロール可能にして、背景画像を固定にする方法を知っている方は教えてください。 私のソースは下記です。よろしくお願いします。 <html> <TABLE border="0" width="695" background="top-6.GIF"> <TR><TD width="72" height="34"></TD><TD width="623" height="34"><font color="red"><b><center>お知らせ</center></b></font></TD></TR> </TABLE> </DIV> </DIV> <!--本体部分--> <DIV style="overflow-y:scroll;direction:ltr;width:695;height:114px"> <DIV style="direction:ltr"> <TABLE border="0" width="695" background="top-7.GIF" style="background-attachment: fixed"> <TR><TD width="72">A</TD><TD width="623">B</TD></TR> <TR><TD>C</TD><TD>D</TD></TR> <TR><TD>E</TD><TD>F</TD></TR> <TR><TD>G</TD><TD>H</TD></TR> <TR><TD>I</TD><TD>J</TD></TR> <TR><TD>K</TD><TD>L</TD></TR> <TR><TD>M</TD><TD>N</TD></TR> <TR><TD>O</TD><TD>P</TD></TR> </TABLE> <DIV style="overflow-y:scroll;direction:ltr;width:695; scrollbar-base-color:#FFFFFF; scrollbar-track-color:#FFFFFF; scrollbar-face-color:#FFFFFF; scrollbar-shadow-color:#FFFFFF; scrollbar-darkshadow-color:#FFFFFF; scrollbar-highlight-color:#FFFFFF; scrollbar-3dlight-color:#FFFFFF; scrollbar-arrow-color:#FFFFFF"> <DIV style="direction:ltr"> </DIV> </DIV> </html>

  • スクロールバーの表示位置を変えたい

    スクロールバーの表示位置をテーブルの右側から、テーブルの左側に移したいのですが、単にdiv文をTableの前に持ってきても変更できません。 どのようにしたら左側に表示できるのでしょうか? <div id="rowScroll" STYLE="overflow-y:scroll; height=280;width:100%"> <table border="1" CELLSPACING="0" class="tableSearch2" width="20%" align="left"> <tr class="tdListTitle"> <td width="24" align="center" nowrap>レ</td> <td width="21" align="center">No</td> <td width="195" align="center" nowrap>L5.資源名称</td> <td width="60" align="center" nowrap>単位</td> <td width="100" align="center" nowrap>投入数量/単価</td> </tr> </table>

  • CSSだけで、テーブルにスクロールバーを表示させたいのですが…

    CSSを使い、テーブルにスクロールバーを表示させたいのですが <div style="height:60px; width:300px; overflow-y:scroll;"> <table border=1 width=300> : </table> </div> 上記の方法だと確かにスクロールバーは表示されるのですが、出来ればDIVを使わずに、作っておいたCSSを適用するだけで、テーブルにスクロールバーを表示させることは可能でしょうか? 出来れば、スクロールバーの色を変更して、横(X軸)のスクロールバーも消したいのですが… CSSで .scroll { overflow: scroll; visibility: visible; height: 100px; width: 140px; } とやってみたのですが、どうしてもスクロールバーが表示されません。何が足りないのか、もしくは根本から間違っているのかがわかりません。 ご存知の方教えて下さい。

    • ベストアンサー
    • HTML
  • スクロールバーが表示されない。。

    枠つきのスクロールバーをもらい ブログにつけようとしましたが、 なぜか枠だけでスクロールバーだけが表示されません。。 原因はなんでしょうか? 改善の方法はありますか? 下のタグです <div style="width:337;height:200;overflow:auto; scrollbar-3dlight-color:#ff00ff; scrollbar-arrow-color:#ff00ff; scrollbar-darkshadow-color:#ffffff; scrollbar-face-color:#ffffff; scrollbar-highlight-color:#ffffff; scrollbar-shadow-color:#ff00ff; scrollbar-track-color:#ffffff; "> <Table border="1" width="320" height="300" cellspacing="0" bordercolor="#004a95"> <Tr><Td height="30" bgcolor="#004a95" align="left"> <font size="3" color="#ffffff" face="MS ゴシック"> タイトル部分</font> </Td></Tr> <Tr><Td bgcolor="#ffffff" align="center" valign="top"> 内容部分 </Td></Tr> </Table></div>

    • ベストアンサー
    • CSS
  • フレームページのスクロールバーを装飾する。

    フレームページのスクロールバーを装飾する。 忍者で二分割のサイトを作っている者です。 ページ全体のスクロールバーを装飾する事は出来ましたが、フレームページのスクロールバーを装飾する事が出来ません。 同時に、フレームページのスクロールを上下だけにしたいと思っています。 私の予想では、 <HEAD> <style type="text/css"> <!-- body{ overflow-x:hidden; } --> </style> </HEAD> <BODY> <STYLE TYPE="text/css"> <!-- Body{ scrollbar-3dlight-color:#2f4f4f; scrollbar-arrow-color:#2f4f4f; scrollbar-darkshadow-color:#ffffff; scrollbar-face-color:#ffffff; scrollbar-highlight-color:#ffffff; scrollbar-shadow-color:#2f4f4f; scrollbar-track-color:#ffffff; }--> </STYLE> </BODY> ↑このHTMLでスクロールを上下だけにし、スクロールバーを装飾できるのですのですが、肝心の入れる場所が分かりません。 ↓サイトのHTML <table border="0" cellspacing="0" cellpadding="0" width="100%" height="100%"> <tbody> <p> <tr> <td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" class="t" height="40%" valign="middle" width="40%" nowrap="nowrap" align="center"> <h1><br /> <tt>L・L・B</tt></h1> <!--ここからメニュー変更箇所> <td height="40%" width="60%" nowrap="nowrap" align="right"><img alt="" src="?http://*****/yanekko01.gif"? /></td> </tr> <tr> <td height="60%" valign="top" width="40%" nowrap="nowrap" align="center"> <div class="copyright">since-2010.4.10<br /> <br /> <br /> <br /> <img alt="" src="?http://*****/simpleVC_img/nitizyou3.gif"? /></div> </td> <td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" height="60%" valign="top" width="60%" align="center"><iframe height="100%" src="i.html" frameborder="0" width="100%" name="a" scrolling="yes" align="middle"></iframe><br /> <br /> &nbsp;</td> </tr> </p> </tbody> </table> 少しHTMLを省略しましたが、こんな感じです。 何処に入れればいいのかを教えて下さい!

    • ベストアンサー
    • HTML
  • floatすると親要素より横にずれてしまいます

    #contentsにある2つのボックスが左へ20pxほどずれてしまいます。 いろいろと調べてみたのですが解決できませんでした。 長文になってしまい申し訳ありませんが、ご指導よろしくお願いします。 <<CSS>> body { font-size:10px; margin: auto; padding: 0; text-align:center; min-width: 810px; max-width: 850px; height: 100%; } #wrapper { width: 830px; height:100%; margin-left:auto; margin-right:auto; padding-top: 10px; padding: 0; background-color: #FFF; } #header { width: 830px; height: 150px; margin: 0; padding-bottom: 0; min-height: 1%; overflow: hidden; line-height: 0px; background: url(back_top.gif) #F9F9F7 center top no-repeat; } img { display:block; } #logo { float: left; width: 450px; height: 78px; padding-top: 50px; padding-bottom: 0; margin-left: 40px; background: transparent; } #logo h1 { width: 450px; height: 78px; font-size:12px; margin: 0; padding-bottom: 0; background: transparent; } #navi { float: right; width: 310px; height: 50px; padding-top: 60px; margin-right: 30px; line-height: 0px; } #contents { width: 830px; min-height: 600px; margin: 0; background: url(back_main.gif) #F9F9F7 center repeat-y; } #contents #sub { float: left; width: 180px; height: auto; text-align: center; } ul { margin: 0; padding: 0; float: left; width: 180px; list-style: none; color: #794c2c; background-color: #EDE4EB; } li { display: block; margin: 0; padding: 0; font-size: small; } li span { display: block; font-size: x-small; } li#c01 a { background: url(c01.jpg) 7px 5px no-repeat; } li#c02 a { background: url(c02.jpg) 7px 5px no-repeat; } li a { display: block; min-height: 40px; padding: 5px 7px 5px 66px; border-bottom: 1px dotted #ffffff; text-decoration: none; color: #aa8f78; background-color: #F3EEDE; } ul li a:hover { color: #794c2c; background-color: #F3FAD1; } /* Hides from IE-mac \*/ * html ul li a, * html ul li { height: 40px; line-height: 1.5; } /* End hide from IE-mac */ /* line-heightはli間の隙間をなくするために指定 */ #contents #main { float: right; margin-right: 50px; width: 500px; height: auto; background-color: transparent; } #footer { width: 830px; height: 100px; background: url(back_bottom.gif) #F9F9F7 center no-repeat; margin: 0; } <<html>> <body> <div id="wrapper"> <div id="header"> <div id="logo"><h1><a href="/"><img src="../../Documents/logo.png" width="450" height="78" border="0" alt="HOMEPAGE" /></a></h1></div> <div id="navi"><p>SAMPLE</p> <div id="srchBox">**yahoo検索窓** </div></div> <div style="clear:both;"></div> <div id="contents"><div id="sub"><ul><li>&nbsp;</li><li id="c01"><a href="c01.htm">c01<span>c01</span></a></li><li>&nbsp;</li><li id="c02"><a href="c02.htm">c02<span>c02</span></a></li</ul></div> <div id="main"><img src="../../Documents/001.jpg" width="400" height="354" border="0" /></div></div> <div id="footer"><table border="0" width="750" height="100" align="center"><tr><td width="250" height="70" align="center" valign="top">AAA</td><td width="250" height="70" align="center" valign="top">BBB</td><td width="250" height="70" align="center" valign="top">CCC</td></tr><tr><td colspan="3" width="750" height="30">&nbsp;</td></tr></table></div> </div> </div> </body>

  • クリックすると横にスムーズスクロールするもの

    いつもお世話になっております。 何度かこの質問をさせて頂いたのですが、また挑戦しているので教えて下さい。 ※長文です。 矢印をクリックすると下の「内容」というテーブルが左右にスムーズスクロールするものを作りたいと思っています。 分かりやすく言うとアップルの動画のページのようなjavascriptを組みたいのです。   ┌──┐ ← │内容│ →   └──┘ 今やってみているのは 以下のURLのマウスオーバーでテーブルの内容が上下にスクロールするというものを マウスオーバーではなくクリックにして、上下スクロールではなく左右のスクロールにする。 http://www.makoto3.net/softbank/fix/ss063/ss063.html onclickにしてもマウスオーバーのイベントが残っている感じでマウスが乗っている間はスクロールしていまいます。 次に http://www.akikobrand.com/html/index.html こちらの「Javascriptで横スクロールさせる」を作り替えて </script> </head>以降を <a HREF='#'>→</a> <body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0"> <div style="overflow:auto;width:100px;"> <table border="1" cellpadding="0" cellspacing="0" width="1800"> <tr> <td width="600"><img src="001.jpg" border="0"> </td> <td width="600" valign="bottom"><a name="javascript:slidePage(true,0,600)"></a> <img src="002.jpg" border="0"> </td> <td valign="bottom"><img src="003.jpg" border="0"> </td> </tr> </table> </div> としてみましたが、スムーズスクロールにならないのと、矢印のクリックが一度しかききません。 これをクリックする毎に右へ移動するようにしたいです。 この場合どちらを使えば良いか、またその場合どうすればいいかどなたか宜しくお願い致します。

  • 別ウィンドウでスクロールバーを表示させる

    画面中央位置に別ウィンドウを開くまでは上手くいったのですが スクロールバーを表示させることができません・・・。 こちらのソースにスクロールバーを表示させるソースを加えたいのですが どうしたらいいでしょうか・・。知識があまり無いのにサンプルを拾ってきて応用しましたのでわかりません・・。初歩的な質問ですみません・・・・ <script type="text/javascript"> function popWin1() { var popW = 521; var popH = 690; window.open('/html/page72.html', 'pop', 'width='+popW+',height='+popH+',top='+((screen.height-popH)/2)+',left='+((screen.width-popW)/2)); } </script>

  • スタイルシートでのデザイン

    HTMLを組む際、今までレイアウトはtableタグで組んでいたのですが、CSSで組もうと思っています。 例えば、 <table align="center"> <tr> <td colspan="2" width="500" height="80">aaa</td> <td rowspan="2" width="300" height="200">bbb</td> </tr> <tr> <td colspan="2" width="500" height="20">ccc</td> </tr> <tr> <td width="200" height="100">ddd</td> <td width="300" height="100">eee</td> </tr> </table> をスタイルシートで配置しようと思い、 <div align="center" style="width:800px"> <div style="float:left;width:500px;height:80px;background-color:#ff9999">aaa</div> <div style="float:right;width:300px;height:200px;background-color:#9ff999">bbb</div> <div style="float:left;width:500px;height:20px;background-color:#9999ff">ccc</div> <div style="float:left;width:200px;height:100px;background-color:#99ffff">ddd</div> <div style="float:center;width:300px;height:100px;background-color:#ffff99">eee</div> </div> としたのですが、センタリングされないのと、eeeの箇所がdddの隣に来ないで次の行に移ります。 うまく出来ないので、どなたか教えて下さい。お願いします。

    • ベストアンサー
    • CSS

専門家に質問してみよう