jquery 弹出框 显示 隐藏

今天写了两个类似天猫商城的弹框,先上图,上代码,再说明:

案例一:

html:

<!-- search-bar {{{ -->
    <div>
	<ul>
	  <li>
		<input type="text" value="美特斯邦威" 
		    title="在您选择的条件下搜索" id="filter-search-keyword">
	  </li>
	  <li>
	      <div id="filter-cats">
		  <span>所有分类</span>
		  <ul>
			<li><a href="#">所有分类</a></li>
			<li><a href="#">精品男装</a></li>
			<li><a href="#">品牌女装</a></li>
			<li><a href="#">睡衣/家居服/浴袍</a></li>
			<li><a href="#">内衣/塑身/袜品/文胸</a></li>
			<li><a href="#">箱包皮具</a></li>
			<li><a href="#">休闲</a></li>
			<li><a href="#">品牌特卖</a></li>
			<li><a href="#">时尚女鞋</a></li>
			<li><a href="#">流行男鞋</a></li>
			<li><a href="#">童装/童鞋/亲子装</a></li>
			<li><a href="#">服饰配件/皮带/帽子/围巾</a></li>
		  </ul>
	      </div>
	  </li>
	</ul>
	<b>
	    <input type="submit" id="j-keybtn" value="搜索">
	</b>
    </div>
<!-- }}} -->

css:

/* search-bar {{{ */
.search-bar {
  float: left;
  position: relative;
  width: 255px;
  z-index: 2;
}
.search-bar ul {
  background-color: #F7F7F7;
  border: 1px solid #CCCCCC;
  float: left;
}
.search-bar .search-menu {
  background-position: 56px -52px;
  cursor: pointer;
}
.search-bar .search-menu {
  border-color: #E1E1E1;
  border-style: none none none solid;
  border-width: 0 0 0 1px;
  color: #999999;
  line-height: 22px;
  padding: 0 16px 0 5px;
  position: relative;
  width: 51px;
  z-index: 1111;
}
.search-bar .search-menu span {
  display: block;
  overflow: hidden;
  white-space: nowrap;
  width: 50px;
}
.search-bar .search-menu .sub-menu {
  background-color: #FFFFFF;
  border: 1px solid #91A8B4;
  display: none;
  height: 220px;
  left: -1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  top: 23px;
  width: 160px;
}
.search-bar .selected .sub-menu {
  display: block;
}
.search-bar .sub-menu li {
  float: none;
}
.search-bar .sub-menu a {
  display: block;
  width: auto;
}
.search-bar .search-menu a {
  color: #666666;
  display: inline-block;
  padding: 3px 0 3px 10px;
  width: 150px;
}
.search-bar .sub-menu .even a {
  background-color: #F2F2F2;
}
.search-bar .sub-menu a:hover {
  background-color: #D5E2FF;
  color: #666666;
  text-decoration: none;
}
.search-bar .key-word input {
  background-color: #FFFFFF;
  border: 0 none;
  color: #666666;
  display: block;
  height: 20px;
  line-height: 20px;
  overflow: hidden;
  padding-left: 4px;
  width: 125px;
}
.search-bar li {
  float: left;
}
.search-bar .search-menu {
    background: url('../images/base/icon.png') no-repeat -888px -182px;
}
.btn-search-wrap {
  border: 1px solid #CCCCCC;
  float: left;
  height: 22px;
  margin-left: -1px;
  overflow: hidden;
}
.btn-search {
  background: -moz-linear-gradient(#FFFFFF, #E5E5E5) repeat scroll 0 0 transparent;
  border: 0 none;
  color: #333333;
  cursor: pointer;
  height: 22px;
  line-height: 22px;
  overflow: hidden;
  width: 50px;
}
/* }}} */

js:

$(document).ready(function() {
    //判断当前元素是否是被筛选元素的子元素或者本身
    $.fn.isChildAndSelfOf = function(b) {
        return (this.closest(b).length > 0);
    };
 
    $('.search-menu').toggle(function() {/* 点击所有分类 {{{ */
        $('.sub-menu').show();
        //第一次点击 弹框显示
        $(document).click(function(event) {
            if(!$(event.target).isChildAndSelfOf('#filter-cats'))  
            // 除了点击的id = filter-cats元素及其子元素之外的元素,弹框就隐藏
            $('.sub-menu').hide(); 
        return false;
    });
    }, function(){
        if($('.sub-menu').is(':visible'))
            $('.sub-menu').hide();
        else
            $('.sub-menu').show();
        //第二次点击元素的时候,判断弹窗是显示还是隐藏的,如果是显示的则隐藏,反之则显示
    });/* }}} */
});

案例二:

html:

<!-- location  {{{ -->
  <div id="filter-location">
     <span><b> 所在地 </b></span>
     <div>
       <ul>
         <li><a href="">所有地区</a></li>
       </ul>
       <ul>
         <li><a href="">江浙沪</a></li>
         <li><a href="">珠三角</a></li>
         <li><a href="">港澳台</a></li>
         <li><a href="">海外</a></li>
         <li><a href="">北京</a></li>
         <li><a href="">上海</a></li>
         <li><a href="">广州</a></li>
         <li><a href="">深圳</a></li>
       </ul>
     <div>
       <form action="">
         <input type="text" name="loc" id="filter-city" value="请输入城市名">
         <button type="submit">确定</button>
       </form>
     </div>
     <ul>
       <li><a href="">杭州</a></li>
       <li><a href="">温州</a></li>
       <li><a href="">宁波</a></li>
       <li><a href="">南京</a></li>
       <li><a href="">苏州</a></li>
       <li><a href="">济南</a></li>
       <li><a href="">青岛</a></li>
     </ul>
     <ul>
       <li><a href="">安徽</a></li>
       <li><a href="">福建</a></li>
       <li><a href="">甘肃</a></li>
       <li><a href="">广东</a></li>
       <li><a href="">广西</a></li>
       <li><a href="">贵州</a></li>
       <li><a href="">海南</a></li>
     </ul>
    </div>
  </div>
<!-- }}} -->

css:

/* location {{{ */
.location {
  left: 280px;
  position: absolute;
  top: 9px;
  width: 61px;
  z-index: 111;
}
.location .select-item {
  border: 1px solid #B7B7B7;
  cursor: pointer;
  display: inline-block;
  height: 20px;
  line-height: 20px;
  padding: 0 18px 0 5px;
  width: 43px;
}
.location .item-list {
  background: none repeat scroll 0 0 #FFFFFF;
  border: 1px solid #A9A9A9;
  display: none;
  left: 0;
  padding: 5px 0;
  position: absolute;
  top: 21px;
  width: 203px;
}
.location.hover .item-list {
  display: block;
}
.location .item-list li {
  display: inline;
  float: left;
  height: auto;
  line-height: 1.7;
  margin: 0 3px;
}
.location .item-list li a {
  padding: 2px;
  white-space: nowrap;
}
.location .item-list li a:hover {
  background: none repeat scroll 0 0 transparent;
  text-decoration: underline;
}
.location .item-list li.checked a {
  background: none repeat scroll 0 0 #FF5500 !important;
  color: #FFFFFF;
}
.location .loc1, .location .loc2, .location .loc3, .location .loc4, .userDefine {
  float: left;
  line-height: 1.7;
  padding: 5px;
  width: 193px;
}
.location .split {
  border-top: 1px dotted #808080;
}
.location .user-define {
  padding: 8px 5px 0;
}
.location .user-define input {
  border: 1px solid #949494;
  float: left;
  font-size: 12px;
  height: 20px;
  line-height: 20px;
  color: #898888;
  width: 125px;
}
.location .user-define button {
  float: left;
  margin-left: 4px;
  vertical-align: middle;
}
.location .select-item {
    background: url('../images/base/icon.png') #ffffff no-repeat -893px -182px;
}
/* }}} */

js:

    $('.location').toggle(function() {/* 点击所在地 {{{ */
        $('.item-list').show();
        $(document).click(function(event) {
            if(!$(event.target).isChildAndSelfOf('#filter-location'))    
            $('.item-list').hide(); 
        return false;
    });
    }, function(event){
        if($('.item-list').is(':visible') && event.target.id != 'filter-city')
            $('.item-list').hide();
        else
            $('.item-list').show();
        //这个与上边不同之处,多了一个判断,因为这个框里面还有个搜索框,我需要点搜索框的时候,
        //弹框不隐藏,所以在弹框显示的同时判断下点击的是不是搜索框,如果点击的是搜索框,那么不
        //隐藏,反之隐藏
    });/* }}} */

 

Tags: , , , ,

jquey mouseover target isChildAndSelfOf

需求:鼠标经过vertical menu ‘洋酒’的时候,左边显示一个弹出框。这个相信谁都能实现,我就不多说了。我遇到的问题是,只要鼠标移出了‘洋酒’和弹出层,‘洋酒’的background 和 color 就恢复默认的样式,弹出层随即也消失。
这个问题的难点是,弹出层不是在vertial menu 元素里面,而是与它平级的。这样tab切换,就不用一个一个的给弹出层写class来控制哪个显示隐藏了。下面我贴下相关部分的代码:

html:

         <ul id="commodity-vertical-menu" 
           class="commodity-switch-tabs lf commodity-vertical-menu">
            <li>
              <a href="#" target="_blank">
                葡萄酒 
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                洋酒
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                食用油
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                餐桌食品
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                保健冲饮
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                时尚美妆
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                休闲食品
              </a> 
            </li>  
            <li>
              <a href="#" target="_blank">
                服饰家纺
              </a> 
            </li>  
          </ul> 
          <!-- }}} -->
          <!-- commodity hover block {{{ -->
          <ul id="commodity-hover"  
            class="commodity-switch-blocks 
            commodity-vertical-hover pa>
            <li></li>
            <!-- 洋酒 {{{ -->
            <li>
              <div>
                <p>
                  品牌 
                </p> 
                <p>
                  <a href="#" target="_blank">
                    马爹利 
                  </a> 
                  <a href="#" target="_blank">
                    轩尼诗
                  </a>
                  <a href="#" target="_blank">
                    绝对伏特加
                  </a>
                  <a href="#" target="_blank">
                    芝华士
                  </a>
                </p>
              </div>
              <div>
                <p>
                  种类
                </p> 
                <p>
                  <a href="#" target="_blank">
                    白兰地
                  </a> 
                  <a href="#" target="_blank">
                    威士忌
                  </a>
                  <a href="#" target="_blank">
                    伏特加
                  </a>
                  <a href="#" target="_blank">
                    龙舌兰
                  </a>
                  <a href="#" target="_blank">
                    朗姆酒
                  </a> 
                  <a href="#" target="_blank">
                    金酒
                  </a>
                  <a href="#" target="_blank">
                    果酒
                  </a>
                  <a href="#" target="_blank">
                    啤酒
                  </a>
                </p>
              </div>
              <div>
                <p>
                  产地 
                </p>
                <p>
                  <a href="#" target="_blank">
                    英国
                  </a> 
                  <a href="#" target="_blank">
                    法国
                  </a>
                  <a href="#" target="_blank">
                    德国
                  </a>
                  <a href="#" target="_blank">
                    芬兰
                  </a>
                  <a href="#" target="_blank">
                    比利时
                  </a> 
                  <a href="#" target="_blank">
                    西班牙
                  </a>
                  <a href="#" target="_blank">
                    意大利
                  </a>
                </p>
              </div>
            </li>
            <!-- }}} -->
            <!-- 食用油 {{{ -->
            <li>
              <div>
                <p>
                  品牌 
                </p> 
                <p>
                  <a href="#" target="_blank">
                    伊利亚达
                  </a> 
                  <a href="#" target="_blank">
                    雅典娜
                  </a>
                </p>
              </div>
              <div>
                <p>
                  种类
                </p> 
                <p>
                  <a href="#" target="_blank">
                    特级初榨橄榄油
                  </a> 
                  <a href="#" target="_blank">
                    普通初榨橄榄油
                  </a>
                  <a href="#" target="_blank">
                    低级初榨橄榄油
                  </a>
                </p>
              </div>
              <div>
                <p>
                  产地 
                </p>
                <p>
                  <a href="#" target="_blank">
                    西班牙
                  </a>
                  <a href="#" target="_blank">
                    意大利
                  </a>
                  <a href="#" target="_blank">
                    希腊
                  </a>
                </p>
              </div>
            </li>
            <!-- }}} -->
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
          </ul>
          <!-- }}} -->
     </div>

css:

.pl {
  position: relative;
}
.pa {
  position: absolute;
}
.commodity-vertical-menu {
  width: 100px;
}
.commodity-vertical-menu li {
  float: left;
}
.commodity-vertical-menu li a {
  float: left;
  width: 80px;
  height: 34px;
  line-height: 34px;
  padding-left: 20px;
  border-bottom: #a3968c 1px solid;
  background: #cbc1b9;
  font-size: 12.5px;
  color: #000000;
  font-weight: bold;
}
.commodity-vertical-menu li.last-li a {
  border-bottom: none;
}
.commodity-vertical-menu li.current a {
  background: #836f60;
  color: #ffffff;
}
.commodity-vertical-hover {
  left: 100px;
  top: 0;
  z-index: 999999;
}
.commodity-vertical-hover li {
  width: 162px;
  height: 279px;
  padding-left: 10px;
  display: none;
  background: url('../images/commodity/commodity-vertical-hover.png')
  no-repeat;
}
.commodity-vertical-hover div {
  width: 162px;
  padding: 6px 0 12px 0;
}
.commodity-ver-hover-01 {
  height: 66px;
}
.commodity-ver-hover-02 {
  height: 88px;
}
.commodity-vertical-hover a {
  float: left;
  color: #ffffff;
  margin-right: 10px;
  white-space: nowrap;
  word-wrap: break-word;
}
.commodity-switch-blocks li {
  display: none;
}
.commodity-switch-blocks li.current {
  display: block;
}

js:

<script type="text/javascript" src="./sources/js/jquery/jquery-1.7.js"></script>
$(document).ready(function() {
  $.fn.isChildAndSelfOf = function(b){
    return (this.closest(b).length > 0);
  };
 
  $('.commodity-switch-tabs > li').mouseover(function() {/* tab 鼠标经过切换 切换 {{{ */
    var that = $(this);
    $(this).addClass('current').siblings().removeClass('current');
    var idx = $('.commodity-switch-tabs > li').index(this);
    $('.commodity-switch-blocks > li:eq(' + idx + ')').addClass('current').siblings().removeClass('current');
    $(document).mouseover(function(event) {
      if(!$(event.target).isChildAndSelfOf('#commodity-hover') && !$(event.target).isChildAndSelfOf('#commodity-vertical-menu')) {
        setTimeout(function() {
          that.removeClass('current');
          var idx = $('.commodity-switch-tabs > li').index(that);
          $('.commodity-switch-blocks > li:eq(' + idx + ')').removeClass('current');
        }, 500);
      }
      return false;
    });
    return false;
  });
});

下面主要介绍一下js部分的几段代码:

$.fn.isChildAndSelfOf = function(b){
  return (this.closest(b).length &gt; 0);
};

这个方法的主要作用是,判断当前元素是否是被筛选元素的子元素或者本身

$(this).addClass('current').siblings().removeClass('current');

siblings([expr])

取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合。可以用可选的表达式进行筛选。

利用siblings对当前鼠标经过的li,增加class current,改变其样式,把除它之外的li里面有class是current 删除掉(是把current删除掉。。。)

$(document).mouseover(function(event) {
   if(!$(event.target).isChildAndSelfOf('#commodity-hover') &amp;&amp; !$(event.target).isChildAndSelfOf('#commodity-vertical-menu')) {
     setTimeout(function() {
       that.removeClass('current');
       var idx = $('.commodity-switch-tabs &gt; li').index(that);
       $('.commodity-switch-blocks &gt; li:eq(' + idx + ')').removeClass('current');
     }, 500);
   }
   return false;
 });

这一段代码是用来判断鼠标经过的元素,是不是不#commodity-hover 和 #commodity-vertical-menu 这两个元素本身极其子元素,好做出判断是否隐藏弹出层,和li的background和color恢复为默认的样式,event.target是当前鼠标经过的元素,然后利用之前写好的方法,来判断,鼠标经过的是不是这两个元素极其子元素,如果不是,就隐藏。好吧,太晚了,就写这么多,不清楚的地方,可与本人交流。

Tags: , , , , , , , , ,

【分享】前端开发必看—图片格式

最近公司官网改版,再次遇到了格式问题。PNG24图片在IE6下不显示,可恶的IE6啊,每位做前端的都希望,一觉醒来,IE6死绝了,但是这真的是做梦…

IE6下:

FF下:

 

所以下面给大家分享一下我对PNG、JPG和GIF三种常用格式的图片的理解,看完之后就可以解决此类问题了,以下只代表本人看法,欢迎拍砖:

下文常提到的简写说明:

IE6- = IE6及以下版本的IE浏览器

IE7+ = IE7及以上版本的IE浏览器

FW = Fireworks

PS = Photoshop

1.最佳格式PNG

PNG图片的格式分为三种类型:

  • PNG8 256色PNG的别名

半透明的PNG8在IE6-的浏览器中显示为全透明。Google之后,了解到:

全透明的PNG8可以在所有的浏览器里正常显示(就像GIF一样)。半透明的PNG8在除了IE6-的浏览器错误的显示成全透明,其它浏览器都能正常显示半透明。这个bug并不需要特殊对待,因为在不支持半透明的浏览器下只是显示为全透明,对用户体验影响不大,它反而是透明GIF的加强版。

  • PNG24 全色PNG的别名
  • PNG32 和PNG24一样(但是附带了全alpha通道)

Fireworks导出的PNG24格式的透明图片在IE7+,FF及现代级的浏览器下全部无效,但是保存为PNG32的时候,透明就有效。但是用Photoshop在“存储为WEB格式”中的PNG24(然后勾选“支持透明”选项)的图片在IE7+,FF及现代级的浏览器下全部有效,说明PS导出的PNG24就是FW导出的PNG32

那么FW导出的PNG24和PNG32有什么不一样了?

PNG32在每个像素上不仅存储了24位真色彩信息,还存储了8位的Alpha通道信息,就如同GIF能存储透明和不透明信息一样。当我们把图片放到不太搭配的背景上的时候,透明PNG图片的边缘会显示得更加平滑。

2.JPG

不支持透明,一般用来作为Web上的摄影图片和一些需要裁剪,旋转的图片。

3.GIF

支持透明(布尔型透明,也就是全透明,不支持Alpha半透明),支持动画。只有256种颜色的GIF不适合作为高质量的图片,但它适合对颜色要求不高的图形(比如说图标,图表等),当然GIF也有它的优势,可以做简单的动画效果图。

 

最后总结下,Web中的图片,PNG32、PNG24为最好格式,用到透明的图片可以使用PNG8,像小的图标也有使用GIF格式的图片,如需要高质量的透明图片,建议使用PNG24,但是PNG24在IE6-下透明显示有问题,解决方法可以参照这里: png图片背景在ie6下透明。还有本人建议,前端开发人员和设计人员最好使用Fireworks来设计和切图,因为这才是Web图片最佳的选择。

Tags: , , , , ,

我的“900个月”

  • 2012-07-10 3个月又过去了,时间飞逝,自己觉得对不起这3个月的时光,我是个不那么自觉的人,希望来个给我压力,把我往前推的人。。。
  • 2012-04-06 又少了一个月啊,这个月过的累啊!
  • 这是在阮一峰的blog,统计2011年访问量第一的一篇文章。人生只有900个月,算是长寿了,可以活到75岁。特意绘制一个表格,时常更新下自己还剩下多少时间。。。

本人生于1990年02月02日,红色背景为过去式了,蓝色背景为未来式,每过完一个月,我会添加为过去式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900

表格有些粗糙,敬请谅解,有空好好配下色,希望达到此篇博文的人,能够珍惜剩下的时光,当然我也会好好珍惜的!

 

Tags: ,