ホームページ >ウェブフロントエンド >jsチュートリアル >jquery を使用してカスタム スタイル スライダーを実装する code_jquery

jquery を使用してカスタム スタイル スライダーを実装する code_jquery

WBOY
WBOYオリジナル
2016-05-16 18:07:251113ブラウズ

数日前、学生のオンラインホームページがリニューアルされ、スペースの制限により、当初計画されていたツールの多くを狭い領域に配置する必要がありました。具体的な効果は次のとおりです。 🎜>

jquery を使用してカスタム スタイル スライダーを実装する code_jquery

もちろん、この効果は HTML に付属のコントロールを使用して実現することもできます。ただし、カスタマイズすると、スライダーのスタイルを赤、青などに設定したり、ボタンの形状を自分で作成したりすることもできます。

達成する必要がある効果は、これらのツールを一度に表示領域に最大 9 つ表示できることです (ここでは、ツール項目の総数が 9 つを超えると仮定していますが、9 つ未満の場合は、 、将来的には9まで拡張される可能性があります)、上下のボタンをクリックすると、表示されている領域内でツール領域を上下に移動できます。

しかし、これを実行した後、操作スタッフがいくつかのアドバイスをくれました。スライダーを動かしてツールバーを上下にスライドさせることができれば、ユーザーエクスペリエンスが向上します。しかし、言うのは簡単ですが、少し面倒です。すること。

最初から始めましょう。私のアイデアは次のとおりです:

    全体の領域はツール領域 (class="toolBox") とスライドバー領域 (class="slideBar") の 2 つに分かれています。
  1. ツール領域 (class="toolBox") は相対位置に設定されており、内側にすべてのツールを格納するための大きなストリップがあります。 余分な部分は 3 つあります。表示されません (これは非常に重要です))、外部ツール領域 (class="toolBox") を基準にして絶対的に配置されるため、各スライドは上部の値のみを変更する必要があります。
  2. 右側のスライド バー領域 (class="slideBar") には、上ボタン (class="upBtn")、下ボタン (class="downBtn")、スライド バー ボックス (class="barBox) の 3 つがあります。 ") 。スライダー ボックス (class="barBox") は、スライダーを格納するための単なる「ボックス」であり、その中にスライダーがあります (class="innerBar")。ツールバーと同様に、スライド バー (class="innerBar") はスライド バー ボックス (class="barBox") を基準にして絶対的に配置されます。変更する必要があるのは、スライド バー (class="innerBar") の上部の値だけです。 ) スライドを実現します。左側のツールバーと同期してスライドします。では、スライダーの高さは固定されているのでしょうか? もちろん、その高さは左側のツールの行数によって決まります。これはjsで実装する必要があります(これについては後述します)。
HTML コードは次のとおりです:


コードをコピーします コードは次のとおりです:




 



 




css代码如下:
复制代 代码如下:

/***大きな箱***/
#smallTools
{
background:url(../images10/smallBarBg.gif)repeat-x 左下;
位置:相対;
高さ:227ピクセル;
オーバーフロー:非表示;
}
/***左側と右側のレイアウト***/
#smallTools .toolBox /***左側のツールボックスエリア***/
{
高さ:207px;
マージントップ:10px;
浮動小数点:左;
幅:237ピクセル;
マージン左:10px;
オーバーフロー:非表示;
位置:相対;
}
#smallTools .slideBar /***右側のスライダーエリア***/
{
高さ:227px;
float:right;
幅:11px;
}
/***左フレームの要素の特定のスタイル***/
.innerToolBox
{
位置:絶対;
左:0px;
トップ:0px;
}
#smallTools ul
{
高さ:69px;
}
#smallTools ul li
{
float:left;
幅:79ピクセル;
高さ:69px;
text-align:center;
}
#smallTools ul li a
{
display:block;
幅:79px;
高さ:22px;
パディングトップ:47px;
カラー:#000;
}
/***以下は各ツールアイテムの背景を設定する場合です***/
#smallTools ul li.tool1
{
background:url(../images/tool1.gif) no-repeat center 7px
}
#smallTools ul li.tool2
{
background:url(../images/tool2.gif) リピートなし中央 7px
}
#smallTools ul li.tool3
{
background:url(../images/tool3.gif) リピートなし中央 7px
}
#smallTools ul li.tool4
{
background:url(. ./images/tool4.gif) リピートなしの中心 7px
}
#smallTools ul li.tool5
{
background:url(../images/tool5.gif) リピートなしの中心7px
}
#smallTools ul li.tool6
{
background:url(../images/tool6.gif) リピートなし中央 7px
}
#smallTools ul li .tool7
{
background:url(../images/tool7.gif) リピートなし中央 7px
}
#smallTools ul li.tool8
{
background:url (../images/tool8.gif) no-repeat center 7px
}
#smallTools ul li.tool9
{
background:url(../images/tool9.gif) no-中央を7px繰り返します
}
/***右スライダーの特定のスタイル***/
.slideBar .upBtn /***ボタンを上にスライドさせます***/
{
display:block;
行の高さ:0px;
幅:9px;
高さ:7px;
background:url(../images/up_btn.png) 左上、繰り返しなし;
マージントップ:2px;
パディング:0px;
}
.slideBar .upBtn:hover
{
border:1px Solid #000000;
}
.slideBar .downBtn /***ボタンを下にスワイプ***/
{
display:block;
行の高さ:0px;
幅:9px;
高さ:7px;
background:url(../images/down_btn.png) 左上、繰り返しなし;
マージン:0px;
パディング:0px;
}
.slideBar .downBtn:hover
{
border:1px Solid #000000;
}
#smallTools .barBox
{
高さ:196px;
マージン:4px 0px;
幅:11px;
位置:相対;
}
.innerBar
{
位置:絶対;
幅:10px;
背景:#a4a4a4;
カーソル:s-resize;
トップ:0px;
}

次に、スクリプト コードを追加します。便宜上、ここでは jQuery を使用します。

复制代码代码如下:

$( function()
{
/***객체 메소드, 일부 멤버 변수 할당
변수: elem: 위아래로 이동할 도구 모음 영역 이름(요소 이름, ID, 클래스의 조합)
perHight: 이동할 각 그리드의 길이 a time
slideN: 도구 모음에 있는 도구 행 수
showN: 표시되는 도구 행 수(여기서는 3)
speed: 한 번 이동하는 데 걸리는 밀리초 수
index: 가시 영역의 첫 번째 행
barElem 인덱스: 슬라이더 이름(요소 이름, ID 및 클래스의 조합)
***/
function toolBar(elem,perHeight,slideN,showN,speed,index,barElem)
{ …}
toolBar.prototype=
{
/***슬라이더 막대 높이 설정
높이 계산 공식: 슬라이더 막대에 설정할 수 있는 최대 높이 *표시되는 도구 행 수/도구 모음에 있는 도구의 총 행 수
***/
initBar:function()
{…},
/***툴바 슬라이딩 기능, to는 슬라이딩할 인덱스로, 상하 버튼을 클릭하거나 슬라이드바를 움직일 때 이 기능이 실행됩니다** */
slide:function(to)
{… },
/***슬라이드 바 슬라이딩 기능, to는 슬라이딩할 인덱스로, 이 기능은 위, 아래 버튼을 클릭할 때 실행되며 슬라이드 기능과 동기적으로 구현됩니다***/
barSlide:function(to)
{… **이 함수는 위쪽 및 아래쪽 버튼에 대한 클릭 이벤트를 추가합니다
upelem: 위쪽 버튼 이름(요소 이름, ID 및 클래스 조합)
downelem: 아래쪽 버튼 이름(요소 이름 조합) 이름, 아이디, 클래스)
***/
clickTab:function(upelem,downelem)
{…},
/***슬라이드 바를 드래그하는 기능은 드래그 후 도구 상자도 그에 따라 이동합니다.
elem : 이동해야 할 요소의 이름(요소명, id, 클래스의 조합)
handle : 해당 요소를 이동하기 위해 드래그해야 하는 핸들 요소의 이름(요소의 조합) 요소 이름, ID 및 클래스)
uplev: 드래그된 요소의 가장 높은 지점(여기서는 0)
downlev: 드래그된 요소의 가장 낮은 지점(여기서는 196)
***/
drag:function(elem,handle,uplev ,downlev )
{…}
}
/***객체의 인스턴스화 및 관련 함수 호출은 다음과 같습니다***/
})

전체 js 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

$(function()
{
function toolBar(elem,perHeight,slideN,showN,speed,index,barElem)
{
this.elem=$(elem) ;
this.perHeight=perHeight;
this.showN=showN;
this.index=index; .barElem=barElem;
}
toolBar.prototype=
{
initBar:function()
{
var tl=$(this.barElem).parent().height ();
$(this.barElem).css({'height':tl*this.showN/this.slideN});
},
slide:function(to)
{
this.elem.animate({'top':-(to*this.perHeight)},this.speed)
},
barSlide:function(to)
{
var tl=$(this.barElem).parent().height();
$(this.barElem).animate({'top':tl*to/this.slideN},this.speed)
},
clickTab:function(upelem,downelem)
{
var _this=this;
$(upelem).bind('click',function()
{
if (_this.index>0)
{
_this.index--;
_this.barSlide(_this.index);
return false;
});
$(downelem).bind('click',function()
{
if(_this.index<_this.sliden-_this.shown>{
_this.index ;
_this.slide(_this.index);
_this.barSlide(_this.index);
}
false を返します。
});
},
drag:function(elem,handle,uplev,downlev)
{
var _this=this;
var tl=$(this.barElem).parent().height();
var C=$(elem);
var dy、移動します。
var T = $(ハンドル);
T.bind("selectstart", function()
{
return false;
});
T.mousedown(function(e)
{
//dx = e.clientX - parseInt(C.css("left"));
e=e?e:window.event ;
dy = e.clientY - parseInt(C.css("top"));
C.mousemove(move).mouseout(out).css('opacity', 0.8); .mouseup(上)
});
関数 move(e)
{
e=e?e:window.event;
moveout = false;
if((e.clientY - dy)>=uplev&&(e.clientY - dy)
C.css({"top": e.クライアントY - dy});
}
関数 out(e)
{
e=e?e:window.event;
moveout = true;
setTimeout(function(){checkout(e);}, 100);
}
関数 up(e)
{
e=e?e:window.event;
varadaptTop;
var presTop=parseInt(C.css("top"));
C.unbind("mousemove", move).unbind("mouseout", out).css('opacity', 1);
T.unbind("マウスアップ", アップ);
//alert(parseInt(_this.slideN));
if(((presTop/(tl/_this.slideN))-parseInt(presTop/(tl/_this.slideN)))>=0.5)
{
_this.index=parseInt(presTop /(tl/_this.slideN)) 1;
}
else
{
_this.index=parseInt(presTop/(tl/_this.slideN));
}
adaptTop=_this.index*(tl/_this.slideN);
_this.slide(_this.index);
C.css({"top":adaptTop});
}
関数 checkout(e)
{
e=e?e:window.event;
moveout && up(e);
}
}
}
var slength=$("#smallTools .innerToolBox ul").length;
var stBox=new toolBar("#smallTools .innerToolBox",69,slength,3,700,0,"#smallTools .innerBar");
stBox.initBar();
stBox.clickTab("#smallTools .upBtn","#smallTools .downBtn");
stBox.drag("#smallTools .innerBar","#smallTools .innerBar",0,196);
})


水平限定、註釈がある場合、敬请批判指示正。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。