我們在許多網站都可以看到和下圖類似的效果,下面我們來講解一下用javascritpt製作簡單的網站滑動窗效果,在上一篇,我們留下了三個問題,
2.實現較為自然的滑動的效果
3.點選其中一個灰色圓圈後,圓圈變為橙色,其他變為灰色
4.由於圖片放置有先後之分,點選位於前面的圖片後,再點選後面的圖片,能顯示出來
0 用javascritpt製作簡單的網站滑動窗效果(一)
方法/步驟
2.實現較為自然的滑動的效果
上一篇提到了一個slopmove(j)函式,下面是其程式碼
function slopmove(j){
var object1 = picture[j];
if (!object1.style.left) {
object1.style.left = 500 +'px';
}
var leftmove = parseInt(object1.style.left);
if (leftmove>0) {
leftmove=leftmove-Math.ceil((leftmove-0)/15);//平滑演算法
}
else{
clearTimeout(rightm); //到目標後清除計時器
return 1;
}
object1.style.left = leftmove + 'px';
var rightm = setTimeout(function(){slopmove(j);},10); //隔10m滑動
}
這個函式的目的就是實現比較平滑的滑動效果,
leftmove=leftmove-Math.ceil((leftmove-0)/15);
這一行,就是平滑的演算法,leftmove是圖片距離容器左邊邊界的距離,圖片目的是移到左邊去,即leftmove=0,Math.ceil((leftmove-0)/15)這裡得到是滑動的距離,應該是先大後小,有一種平滑的效果
var rightm = setTimeout(function(){slopmove(j);},10);
setTimeout設定一個定時器,10ms後執行function(){slopmove(j);,這裡用function(){slopmove(j);,是因為需要傳遞一個引數 j 進slopmove(j)
clearTimeout(rightm); //到目標後清除計時器
return 1;
到邊後消除計時器,並return 1,return 1是為了 離開函式
3.點選其中一個灰色圓圈後,圓圈變為橙色,其他變為灰色:
control[j].style.background = '#FC9D51';
for(var b=0 ;b<5;b++){
if (b!=j) {
control[b].style.background = '#8F8F8F';}
}
這個其實比較簡單,'#FC9D51'是橙色,'#8F8F8F';是灰色
4.由於圖片放置有先後之分,點選位於前面的圖片後,再點選後面的圖片,能顯示出來:
for ( var i=j+1 ; i < 5; i++) {
picture[i].style.left = 500 +'px';
}
j 是你點選圓圈 j 觸動的圖片 j,這裡意思是把比圖片j位置要高的移走,為何要移走呢,因為,圖片重疊是,是序號大的圖片放在上面,序號小的圖片就會被遮住,所以我們要把序列更大先移走以免擋了要顯示的圖片
下面是js的完整程式碼
window.onload=function(){
var picture = document.getElementsByClassName('picture');
var control = document.getElementsByClassName('controlall');
function slopmove(j){
var object1 = picture[j];
if (!object1.style.left) {
object1.style.left = 500 +'px';
}
for ( var i=j+1 ; i < 5; i++) {
picture[i].style.left = 500 +'px';
}
var leftmove = parseInt(object1.style.left);
if (leftmove>0) {
leftmove=leftmove-Math.ceil((leftmove-0)/15);
}
else{
clearTimeout(rightm);
return 1;
}
object1.style.left = leftmove + 'px';
var rightm = setTimeout(function(){slopmove(j);},10);
}
for (var i =0; i < control.length; i++) {
(function(i){
var j = i;
control[j].onclick = function (){
picture[i].style.left = 500 +'px';
control[j].style.background = '#FC9D51';
for(var b=0 ;b<5;b++){
if (b!=j) {
control[b].style.background = '#8F8F8F';}
}
slopmove(j);
}
})(i);
}
}
下面是所有程式碼:
window.onload=function(){
var picture = document.getElementsByClassName('picture');
var control = document.getElementsByClassName('controlall');
function slopmove(j){
var object1 = picture[j];
if (!object1.style.left) {
object1.style.left = 500 +'px';
}
for ( var i=j+1 ; i < 5; i++) {
picture[i].style.left = 500 +'px';
}
var leftmove = parseInt(object1.style.left);
if (leftmove>0) {
leftmove=leftmove-Math.ceil((leftmove-0)/15);
}
else{
clearTimeout(rightm);
return 1;
}
object1.style.left = leftmove + 'px';
var rightm = setTimeout(function(){slopmove(j);},10);
}
for (var i =0; i < control.length; i++) {
(function(i){
var j = i;
control[j].onclick = function (){
picture[i].style.left = 500 +'px';
control[j].style.background = '#FC9D51';
for(var b=0 ;b<5;b++){
if (b!=j) {
control[b].style.background = '#8F8F8F';}
}
slopmove(j);
}
})(i);
}
}
*{
margin: 0px;
padding: 0px;
}
.picture{
float: left;
height: 300px;
width: 500px;
}
#picture1{
position: absolute;
left: 0px;
}
#picture2{
position: absolute;
left: 500px;
}
#picture3{
position: absolute;
left: 500px;
}
#picture4{
position: absolute;
left: 500px;
}
#picture5{
position: absolute;
left: 500px;
}
#control{
position: absolute;
top: 270px;
left: 210px;
width: 80px;
height: 20px;
background: #ffffff;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 60px
-moz-opacity: 0.8;
opacity: 0.8;
}
.controlall{
width: 10px;
height: 10px;
background: #8F8F8F;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.controlall:hover{
background: #FC9D51;
}
#control1{
position: absolute;
top: 5px;
left: 10px;
}
#control2{
position: absolute;
top: 5px;
left: 22px;
}
#control3{
position: absolute;
top: 5px;
left: 34px;
}
#control4{
position: absolute;
top: 5px;
left: 46px;
}
#control5{
position: absolute;
top: 5px;
left: 58px;
}
#slipdow{
position: absolute;
top: 20px;
left: 600px;
height: 300px;
width: 500px;
overflow: hidden;}