0

200 を超える用語と定義を含む 2 列のテーブルがあります。「showIt」と呼ばれるscrollIntoView関数をトリガーする選択ドロップダウンによって #anchors にスクロールします。また、hrefs を使用して #anchors までスクロールします。http://poweranddata.info/knowledge-center/terminologyで試すことができます 。それらを試して、 http://jsbin.com/IBePAFo/2/editで完全なコードのサンプルを確認することもできます。

今必要なのは、スクロールした前の行に戻る戻るボタンです。それでおしまい。長い履歴を保存する必要はありません (少なくとも今のところは)。また、可能であれば、位置を保存してスクロールバックしないことをお勧めします。

基本的な onclick ボタン機能は、1 つ目) 現在の行 ID をコピーする、2 つ目)どこかに保存されている以前にスクロールされた行 ID を使用してscrollintoView関数 (以下に示す) をアクティブにする、3) 保存されている以前の行 ID を置き換えるという単純なものであると思います。コピーされた行 ID にスクロールされ、[戻る] ボタンが次のクリックの準備が整います。おそらく、onload はデフォルトで最初の行 ID を保存して、[戻る] ボタンが常に何かを開始できるようにすることができます (または必要ではないかもしれません)。

ここまでたどり着きましたが、頭を悩ませるのに本当に苦労しました。戻るボタン、履歴、Cookie、テーブルなど、あらゆる角度からすべてのフォーラムを検索しました。これに十分な具体的なコードが見つかりませんでした。ほぼすべてがページとウィンドウにのみ適用されるようです。このコードで私を助けてくれる人にはとても感謝しています。

以下のコードは、クイック リファレンス用に提供されています。上記の jsbin と同じ:

<!DOCTYPE html>
<html>  
<head>
<meta charset=utf-8>
<script src="http://code.jquery.com/jquery-latest.min.js"></script> 

<style>    

body { 
    font: 20px Calibri, Serif;
    display: block;
    width:500px;
    margin:0 0 0 0;}

table { 
    display: block; /* makes it sizeable */
    width: 500px;
    height: 100px;  /*height of scrollable area */
    overflow: auto; /* scroll rather than overflow */
    overflow-x:true; /* Bottom Scroll Bar */
    border-collapse: collapse;
    margin:0 0 0 0;
    border:1px solid #ccc;} 

tr:nth-of-type(odd) { background: #eee; } /* Zebra striping */

th { 
    background: #333; /*Not used - No headers*/
    color: white; /*Not used - No headers*/
    font-weight: bold; /*Not used - No headers*/
}
td, th { 
    border: 1px solid #ccc; 
    text-align: left; 
}
td  {vertical-align:text-top; padding:6px 10px 6px 10px; }  

table.fixed table {width:500px;} /*setup for col widths */
table.fixed td:nth-of-type(1) {width:200px;} /*sets col width */
table.fixed td:nth-of-type(2) {width:300px;} /*sets col width */  

</style> 

<!--FUNCTIONfor: SCROLL-INTO-VIEW (used for select dropdown and top & bottom buttons)-->
<script type="text/javascript">
function showIt(elID) {
var el = document.getElementById(elID);
el.scrollIntoView(true);}

</script>

<!--FUNCTIONfor: RESETING SELECT DROPDOWN-->      
<script type="text/javascript">
function resetScrollTo() {
for (var i = 0; i < elements.length; i++)
{
elements[i].selectedIndex = 0;
}
}
</script>   

<!--FUNCTIONfor: BACK BUTTON ???????????????-->     




</head>

<body>

<div style="margin:0 0 10px 0;"> <!--Dropdown/button CONTAINER-->   

<!--BOX: SCROLL-TO ("showIt")--> 
<select class="box-select_scrollto" id="box-select_scrollto"     onchange="showIt(this.options[this.selectedIndex].value)"> 
<option value="scroll-to" selected>SCROLL-TO</option> 
<option value="absorber">absorber</option>
<option value="accessible">accessible</option>
<option value="adjustable">adjustable</option>
<option value="ampacity">ampacity</option>
<option value="ampere">ampere</option>
<option value="appliance">appliance</option>
<option value="approved">approved</option>
<option value="askarel">askarel</option>
<option value="automatic">automatic</option>
<option value="coulomb">coulomb</option>
<option value="current">current</option>
<option value="cutout">cutout</option>
<option value="cutout box">cutout box</option>
<option value="data">data</option>
<option value="data server">data server</option>
<option value="data storage">data storage</option>
<option value="dead front">dead front</option>
</select> 

<button class="buttonTop" type="button" onclick="resetScrollTo()">Reset</button>
<button class="buttonTop" type="button" onclick="showIt('top');     resetScrollTo();">Top</button>
<button class="buttonBottom" type="button" onclick="showIt('bottom')">Bottom</button>
<button class="buttonBottom" type="button" onclick="back()">Back</button>

</div>  

<table class="fixed" class="sortable" id="termtable" name="termtable">

<tr><td id="top">Top row</td><td>Top row</td></tr>
<tr><td id="absorber">absorber</td><td>Definition  includes <a style="color: #04b404;"     href="#cutout">cutout</a></td></tr>  
<tr><td id="accessible">Definition</td><td>Definition includes  <a style="color:     #04b404;" href="#dead front">dead front</a></td></tr>
<tr><td id="adjustable">adjustable</td><td>Definition</td></tr>
<tr><td id="ampacity">ampacity</td><td>Definition</td></tr>
<tr><td id="ampere">ampere</td><td>Definition</td></tr>
<tr><td id="appliance">appliance</td><td>Definition</td></tr>
<tr><td id="approved">approved</td><td>Definition</td></tr>
<tr><td id="askarel">askarel</td><td>Definition</td></tr>
<tr><td id="automatic">automatic</td><td>Definition</td></tr>  
<tr><td id="coulomb">coulomb</td><td>Definition</td></tr>   
<tr><td id="current">current</td><td>Definition</td></tr>
<tr><td id="cutout">cutout</td><td>Definition includes  <a style="color: #04b404;"     href="#absorber">absorber</a></td></tr>
<tr><td id="cutout box">cutout box</td><td>Definition</td></tr>
<tr><td id="data">data</td><td>Definition</td></tr>
<tr><td id="data server">data server</td><td>Definition</td></tr>
<tr><td id="data storage">data storage</td><td>Definition</td></tr>
<tr><td id="dead front">dead front</td><td>Definition includes  <a style="color: #04b404;" href="#accessible">accessible</a></td></tr>
<tr><td id="bottom">Bottom row</td><td>Bottom row</td></tr>  

</table>
</body>
</html>
4

1 に答える 1

0

jquery を削除し、他の JS に置き換えました。このコードではリセット ボタンは基本的に必要ないため、削除できます。

「戻る」ボタンが機能するには、実際には別のページに「移動」する必要があります...まったく新しいURLです。このスクリプトはそれを行い、段階的に戻ることを可能にします...上に移動する...または下に移動します。

これを試して...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>    
body { 
font: 20px Calibri, Serif;
display: block;
width:500px;
margin:0 0 0 0;}

table { 
display: block; /* makes it sizeable */
width: 500px;
height: 100px;  /*height of scrollable area */
overflow: auto; /* scroll rather than overflow */
overflow-x:true; /* Bottom Scroll Bar */
border-collapse: collapse;
margin:0 0 0 0;
border:1px solid #ccc;} 

tr:nth-of-type(odd) { background: #eee; } /* Zebra striping */

th { 
background: #333; /*Not used - No headers*/
color: white; /*Not used - No headers*/
font-weight: bold; /*Not used - No headers*/
}
td, th { 
border: 1px solid #ccc; 
text-align: left; 
}
td  {vertical-align:text-top; padding:6px 10px 6px 10px; }  

table.fixed table {width:500px;} /*setup for col widths */
table.fixed td:nth-of-type(1) {width:200px;} /*sets col width */
table.fixed td:nth-of-type(2) {width:300px;} /*sets col width */  
</style> 
<script type="text/JavaScript">
<!--//
function MM_goToURL() { //v3.0
var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
//-->
</script>
</head>
<body>
<div style="margin:0 0 10px 0;">
<select class="box-select_scrollto" id="box-select_scrollto" onchange="MM_jumpMenu('parent',this,1)"> 
  <option value="scroll-to" selected>SCROLL-TO</option> 
  <option value="#absorber">absorber</option>
  <option value="#accessible">accessible</option>
  <option value="#adjustable">adjustable</option>
  <option value="#ampacity">ampacity</option>
  <option value="#ampere">ampere</option>
  <option value="#appliance">appliance</option>
  <option value="#approved">approved</option>
  <option value="#askarel">askarel</option>
  <option value="#automatic">automatic</option>
  <option value="#coulomb">coulomb</option>
  <option value="#current">current</option>
  <option value="#cutout">cutout</option>
  <option value="#cutout box">cutout box</option>
  <option value="#data">data</option>
  <option value="#data server">data server</option>
  <option value="#data storage">data storage</option>
  <option value="#dead front">dead front</option>
</select>
<button class="buttonTop" type="button" onclick="MM_goToURL('parent','#top');return document.MM_returnValue;">Top</button>
<button class="buttonBottom" type="button" onclick="MM_goToURL('parent','#bottom');return document.MM_returnValue;">Bottom</button>
<script>
<!--//
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var nameOffset,verOffset,ix;

if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
browserName = "Firefox";
} 
else if ((verOffset=nAgt.indexOf("Firefox"))!=1) {
browserName = "Other";
}

if (browserName == 'Firefox'){
document.write(''
+'<button class="buttonBottom" type="button" onclick="history.back();location.reload(forceGet=true);">FF-Back</button>')
}

if (browserName != 'Firefox'){
document.write(''
+'<button class="buttonBottom" type="button" onclick="history.back();">Back</button>')
}
//-->
</script>
</div>  

<table class="fixed sortable" id="termtable" name="termtable">
<tr><td class="topBotRow1" id="top"><a name="top" id="top"></a>Electrical Term</td> <!--"top" FOR TOP BUTTON-->
<tr><td id="absorber">absorber</td><td>Definition  includes <a style="color: #04b404;"     href="#cutout">cutout</a></td></tr>  
<tr><td id="accessible">Definition</td><td>Definition includes  <a style="color:     #04b404;" href="#dead front">dead front</a></td></tr>
<tr><td id="adjustable">adjustable</td><td>Definition</td></tr>
<tr><td id="ampacity">ampacity</td><td>Definition</td></tr>
<tr><td id="ampere">ampere</td><td>Definition</td></tr>
<tr><td id="appliance">appliance</td><td>Definition</td></tr>
<tr><td id="approved">approved</td><td>Definition</td></tr>
<tr><td id="askarel">askarel</td><td>Definition</td></tr>
<tr><td id="automatic">automatic</td><td>Definition</td></tr>  
<tr><td id="coulomb">coulomb</td><td>Definition</td></tr>   
<tr><td id="current">current</td><td>Definition</td></tr>
<tr><td id="cutout">cutout</td><td>Definition includes  <a style="color: #04b404;"     href="#absorber">absorber</a></td></tr>
<tr><td id="cutout box">cutout box</td><td>Definition</td></tr>
<tr><td id="data">data</td><td>Definition</td></tr>
<tr><td id="data server">data server</td><td>Definition</td></tr>
<tr><td id="data storage">data storage</td><td>Definition</td></tr>
<tr><td id="dead front">dead front</td><td>Definition includes  <a style="color: #04b404;" href="#accessible">accessible</a></td></tr>
<tr><td id="bottom">Bottom row</td><td>Bottom row</td></tr>  
</table>
</body>
</html>

実際の例はここで見ることができます... http://siteprevue.net/stackoverflow/scrollto.htm


変更点:

<a name="top" id="top"></a>1)表の最初の行に追加されます。これにより、ページに名前付きのアンカーが作成され、ブラウザーの解釈に依存しません。

2) 「戻る」ボタンのコードを JavaScript に置き換えました。このスクリプトは、最初にブラウザーが Firefox かどうかを判別します。次に、ボタンが Firefox の場合は 1 セットのコードを書き込み、他のすべてのブラウザー用の別のコード セットを書き込みます。

このコードは、Chrome 29.0.1547.66 m、Firefox 23.0.1、IE 8.0.6001.18702、および Safari 5.0.5 (7533.21.1) でテストされました。

欠点... Firefox が「戻る」ためには、ページを以前の URL で再ロードする必要があります。これは、テーブルが DIV 内にラップされているためです。

上記のサンプル ページを Firefox で読み込むと、戻るボタンに「FF-Back」と表示されることに注意してください。これは、上記のブラウザーで正しいボタンが読み込まれることを確認するためのテスト目的でした。


...そして、これがうまくいく場合は、これを答えとして受け入れることを忘れないでください。:)

于 2013-09-17T05:41:51.387 に答える