div()的scrollTop
是可視區域頂部內下多遠。 div的height
是用戶看到的數量。因此,div的scrollTop
加上div的height
必須至少與整個服務條款內部的總高度(我們稱之爲#termsInner
)一樣多。
下面是一些例子HTML代碼:(注:您可以在http://jsfiddle.net/8U7GY/6/嘗試了這一點。)
<p id="instructions">Please read these terms and conditions now.
<b>You must scroll to the bottom before continuing.</b></p>
<div id="terms">
<div id="termsInner">
<p>Lorem ipsum...</p>
</div>
</div>
<span><a id="submit">Register me!</a></span>
一些CSS代碼:
p {
padding: 0.25em;
}
#terms {
border: solid 1px;
height: 24em;
overflow: auto;
margin-bottom: 1em;
}
#termsInner {
padding: 0.5em 0;
}
.highlighted {
background-color: #ff0;
}
#submit {
color: blue;
text-decoration: underline;
}
和一些JavaScript代碼:(必須在$(function() { ... }
);因此只有在文檔準備好後才能執行。)
// Select the elements of the HTML page.
var instructions = $('#instructions'),
terms = $('#terms'),
termsInner = $('#termsInner'),
submit = $('#submit');
// Bind an event handler that will run when the user
// has not scrolled through the terms of service.
submit.bind('click', function() {
// Highlight the instructions.
instructions.addClass('highlighted');
// Remove the highlighting after two seconds.
setTimeout(function() {
instructions.removeClass('highlighted');
}, 2000);
});
// Once the user scrolls through, call showDialog instead
// when the user clicks.
terms.scroll(function() {
if (terms.scrollTop() + terms.height() >= termsInner.height()) {
submit.unbind('click').bind('click', showDialog);
}
});
// This is where you would continue the user registration process.
function showDialog() {
alert('whatever');
}
有幾件重要的事情需要注意。
- 我們不使用
onclick
HTML屬性,而是以編程方式使用bind
和unbind
綁定事件處理程序。這可以讓我們根據用戶是否滾動或不滾動來做出不同的事情。
- jQuery提供
scroll
方法來註冊一個函數,以便在用戶滾動div時運行。我們檢查scrollTop
和height
的總和與div內的內容的高度,如果沒有問題,我們解除綁定原來的處理器並綁定一個新處理器。
- 我們強調說明(如果用戶還沒有向下滾動,但仍然點擊錨點)以便使用。如果用戶點擊並發現什麼都沒有發生,他會認爲註冊表不起作用,會離開您的網站,並留下不好的經歷。
編輯:修復它在Internet Explorer上的工作。由於IE的工作方式,您不能在div #terms
本身設置填充,因此請在#termsInner
之間設置填充。
你能澄清「開/關」的功能?您是否打開/關閉用戶到達ToA結尾後提交表單的能力? – shoebox639 2010-11-01 22:46:09
當用戶點擊錨時,它會運行showDialog(),我想只有當用戶滾動到T&C的底部時纔可以使用該選項。 – Xtian 2010-11-01 22:49:21