国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

下拉選樣式(列表偽裝)

2024-04-27 15:12:03
字體:
來源:轉載
供稿:網友

找了很久,用別人做好的由于都已經改變了dom結構,考慮到對后期不好操作,只好自己做了……

先找一個模版不錯的,自己山寨把……

html

<td colspan="2" style="position: relative;">

 <div class="chooseSite" id="choosePRovince"><ul id="province" class="siteSelect">請選擇省</ul> </div> <div class="province-list" id="province_list"><ul><li>北京市</li><li>北京市</li><li>北京市</li><li>新疆維吾爾自治區</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li><li>北京市</li></ul>   </div><div class="chooseSite"><ul id="city" class="siteSelect">請選擇城市</ul><span class="need"> </span>

</div>

</td>

由于使用select樣式制作沒能成功去除ie自帶的小箭號標志,于是使用ul和li列表來偽裝。

在開始之前,我們先將所有元素樣式設置一下,因為我們要用的列表默認是有外間距和內間距的,并且每個有序列表前面是有一個點。

* {margin: 0;list-style: none;padding: 0;}

首先將第一個div的樣式設置一下:(在此之前需要一個箭頭的圖片,格式大約16*8像素就夠了,圖片PNG格式,無背景,或白色,

右側稍微留些空白,不然作為背景會頂著邊框,不美觀)

.chooseSite {border: 1px solid #2DB2FF;//邊框border-radius: 5px;//邊框弧度box-shadow: 0 0 2px #2DB2FF;//邊框陰影height: 30px;//高度background: url("../img/arrow1.png") no-repeat scroll right center transparent;//背景(小箭號圖標)padding-right: 12px;//右側內邊距,是為小箭號背景留出的,因為在div里面裝了一個ul會蓋住背景圖片padding-left: 6px;//美觀處理,左側留出一些空白line-height: 30px;//行高與div高度相同,保證文字垂直居中width: 110px;//寬度font-size: 13px;//文字大小float: left;//多個div的話讓其浮動可以在一行顯示,為了美觀可以加上外邊距 margin,讓兩個div中間留出一些空白}

下面為列表部分添加樣式:

這里采用絕對定位,這樣出現的時候就可以蓋住偽下拉選元素的下邊框部分,那么要為最近的一個父元素樣式中添加:position:relative;

.province-list {border: 1px solid #2DB2FF;//邊框border-top: 0px;//不要頂部的邊框border-radius: 2px;//邊框弧度小一點box-shadow: 0 1px 2px #2DB2FF;height: 240px;width: 128px;position: absolute;top: 30px;font-size: 13px;background: white;overflow: hidden; padding-top: 4px;display: none;//將他設為隱藏}.province-list li {height: 26px;padding: 2px 0 2px 5px;line-height: 26px;}

大概效果是這樣的:

做好了之后就是添加鼠標懸浮樣式和鼠標單擊后的樣式:(其實是一樣的)

.province-checked {//這里用來表示鼠標懸浮的時候切換的樣式color: white;background: #2DB2FF; }.province-selected {//這里用來表示鼠標單擊li后選中的樣式color: white;background: #2DB2FF; }

考慮到鼠標單擊后需要一個記錄,而鼠標懸浮和移除li的時候會不斷添加和刪除樣式,所以這么設計的

那么開始為li添加事件吧。

在一個scrSEOver(function(){//鼠標懸浮在某個li上,會添加懸浮樣式$(this).addClass('province-checked');});$('form').find('li').mouseout(function(){//鼠標離開某個li后,會去掉懸浮添加的樣式,恢復原來樣式$(this).removeClass('province-checked');});$('form').find('li').click(function(){//單擊事件

//先將已經添加的單擊樣式去掉,此處只能有一個,所以用eq(0)選擇器,直接選擇第一個元素就可以$('.province-selected').eq(0).removeClass('province-selected');

//這里為單擊的li添加樣式$(this).addClass('province-selected');

//獲取我們單擊li的值var province = $(this).text();

//單擊后隱藏該列表$('#province_list').hide();

//此處為ul賦值替代初始值(請選擇省)

……});

});

這樣后,鼠標單擊后會在li上留下紅色部分的樣式,而鼠標懸浮也會有橙色的樣式,同時鼠標移除后又恢復原來樣式。

接下來要為下拉選添加單擊事件了:

需要在$(function(){……})中綁定

$('#chooseProvince').click(function(){if($('#province_list').is(':hidden')){$('#province_list').show();}else{$('#province_list').hide();}});

到這里列表是做好了,但是還不能點別的地方關閉。這里是一個比較坑的地方。花了相當大的功夫找資料。郁悶的差點放棄。

設計是單擊空白處隱藏這個列表:

先寫一個這個:去冒泡

function stopPropagation(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; } 

接下來在$(function(){……}); 里面寫下面綁定方法

$(document).bind('click',function(e){ var e = e || window.event; //瀏覽器兼容性 var elem = e.target || e.srcElement; while (elem) { //循環判斷至跟節點,防止點擊的是div子元素 if (elem.id=='chooseProvince' || elem.id=='province_list') { //試了很多次,發現上面的第一個div也要包括進去return; } elem = elem.parentNode;} $('#province_list').CSS('display','none'); //點擊的不是div或其子元素隱藏列表 stopPropagation(e);//這個不知道有沒用,暫且這么著}); 

那么好了,現在單擊空白的地方已經可以關閉列表了

還有一個問題,列表太長?需要下拉的滾動條怎么辦?

直接給province-list 加上overflow-y:auto;就行了

但是滾動條不是很好看,還需要美化一下的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰兴市| 湘潭县| 资中县| 清远市| 伊川县| 调兵山市| 东阿县| 丹凤县| 富宁县| 宁城县| 商城县| 宾阳县| 长宁县| 泸溪县| 将乐县| 郸城县| 格尔木市| 天门市| 铁岭县| 西贡区| 陆丰市| 临夏县| 如东县| 建昌县| 赤城县| 黎城县| 兖州市| 汉源县| 叙永县| 修文县| 福泉市| 铜梁县| 应城市| 肃宁县| 盐池县| SHOW| 长海县| 浏阳市| 青州市| 乐陵市| 颍上县|