模擬 windows 操作的 ctrl 跟 shift 選取
最近因為有需求,所以自己寫了一個模擬windows操作的行為,一般web的操作行為大概就是click, hover那些比較單純的行為,而這次是要做類似windows可以用ctrl跟shift選取的行為。
首先準備簡單的ul, li結構的列表,並寫簡單的css樣式。
- li{
- padding:10px;
- cursor:pointer;
- border-bottom:1px solid #7ebade;
- }
- li:hover{
- background:#e3f5ff;
- }
- li.selected{
- background:#c4e9ff;
- }
開始寫js,如果點擊某一個li,則選取並取消其他的選取。
- var that = $(this);
- that.addClass("selected").siblings().removeClass();
用ctrl控制複選的行為
- if (e.ctrlKey)
- {
- if(that.hasClass("selected")){
- that.removeClass("selected")
- }else{
- that.addClass("selected")
- }
- }
最後判斷shift點擊後,用變數儲存點擊的li的次序,把中間的li標記起來。
先改寫一下剛單選的部分,紀錄目前點的li
- $begin=$(this).index();
$begin=$(this).index();
- var that = $(this);
- that.addClass("selected").siblings().removeClass();
紀錄終點,並將中間的li都標記起來
- if(e.shiftKey){
- e.stopPropagation();
- $end=$(this).index();
- console.log($begin+", "+$end);
- if($end<=$begin){
- $start=$end;
- $end=$begin;
- }else{
- $start=$begin;
- }
- $("li").removeClass();
- for($i=$start;$i<=$end;$i++){
- $("li").eq($i).addClass("selected");
- }
Demo
這是我自己寫的,也有看到別的文章,只是程式不夠好,這個用法看不大懂,有興趣也可以參考看看。
Snippet: Shift + Click List Items with jQuery
留言