前端学习笔记--JQuery--实践

[转]来自于慕课网学习整理。

一、实现网页定位导航特效

1、分析,设计

功能:滚动页面,右侧导航条随着内容变化而高亮不同的导航内容

102735_aibE_3176241.png

导航与滚动条之间的定位关联,利用距离来判断 offset-top

22090010_Eln7.jpg

说明:滚动条S1到了大于B小于C的位置,说明在二楼。

22090010_HBt5.jpg

090754_qaJh_3176241.png

简写:ul>li*5>a,形成ul底下有5个li,每个li下有个a

用zencoding插件。

样式设置:注意,居中:width:固定宽度;margin:0 auto

103239_1pZt_3176241.png

图片横向排列:display:inline

103614_Tj1Z_3176241.png

导航偏移到主页面的右侧,position:fixed,left:50%,margin-left:400px

常用技巧,left先定位到页面中间,然后根据主页面的宽高,这是margin-left.

104011_gCAG_3176241.png

104742_j0eo_3176241.png

增加锚点链接:实现点击哪里主页内容到哪里。

105515_JoZe_3176241.png

2、JQuery实现

增加功能:滚动页面时依据主页内容的高度,高亮导航信息。

技巧:

计算滚动位置的楼层,把右侧导航信息相应楼层添加"current类",current类的样式为高亮的。

$(window).scroll()事件    //每当滚动滚动条时触发。

$(document).scrollTop()   //获取滚动距离top

遍历(each)每层(item),比较每层top(this.offset().top)与documeng.scrollTop

判断在n楼(itemn),把class=current赋予这层(href="#itemn"),去掉原来的class=current的位置(menu.find(".current"))。

111538_9Rrc_3176241.png

112645_D7WJ_3176241.png

解决Ie6兼容问题:不支持position:fixed

131337_pwU9_3176241.png

但是有跳变,所以增加如下:

131559_b7v5_3176241.png

IETester包含多个版本的IE,可以方便的用来进行兼容性测试,获取下载或者更多信息可以访问:http://www.my-debugbar.com/wiki/IETester/HomePage

3、Js实现

增加功能:滚动页面时依据主页内容的高度,高亮导航信息。

主体函数:

173427_dleR_3176241.png

部分功能函数实现:

173530_KKi0_3176241.png

二、瀑布流布局

1、设计效果

163846_xhKu_3176241.png

2、分析

瀑布流的原理在于:

图片等宽不等高,利用绝对定位先计算再固定图片位置。

具体实现:因为图片等宽,所以第一行图片的列数固定,例如为6,之后的图片放在第一行图片中底边最靠上的图片的下面,再之后的图片放在上面图片中底边最靠上的图片下面,之后的也是如此。。。

164232_JPff_3176241.png

图片与图片之间的距离在class="box"的div定义

每个图片内部有白色边距,在class="pic"的div定义

3、HTML

164500_cWak_3176241.png

4、CSS

165626_2i8w_3176241.png

ps :

1)main设置为relative,因为其子元素的position需要绝对定位;

2)为class="box"的div设置padding而不是margin,使box与box之间拉开距离。

因为js获取计算图片位置时可通过每个数据块的高度=图片高+图片间的距离

用到的offsetHeight包括padding但不包括margin值;

因为box为会计元素,所以要设置float,浮动

3)设置每个图片块的样式:边框,圆角,阴影

4)设置图片的固定宽度,高度自动。

5、JS

封装getByClass(),实现传入父元素和要查找的class名字,返回class为某值得元素数组。

waterfall(),实现图片放在适当的位置:

计算第一行图片的高度,选出高度最矮的;

把下一个图片放到高度最矮的图片的下面,把新加入的图片累加到此列图片的高度上。

把下一个图片放到各列中高度最矮的图片下面,。。。。。。

171348_tWaf_3176241.png

171314_nG4n_3176241.png

101328_uMvT_3176241.png

1)后台提供需要加载的图片,存在dataInt中

2)发生滚动事件,判断是否需要加载后台的图片checkscrollside()(判断依据是:目前最后一张图片是否有超过一半的高度露在浏览器页面上)

3)加载后台图片:创建div,添加className,创建img,添加src属性。

4)调用waterfall(‘main’,‘pin’),功能:计算新图片摆放位置,并且摆放好。

101858_kr8H_3176241.png

waterfall(parent,pin)

5)获取HTML中的Pin元素数组:aPin,求得Pin元素块的宽offsetWidth(包括padding)

6)设置id为main的元素的样式:oPatent.style.cssText,width为固定宽度,margin为:0 auto;

7)把Pin元素的前六个高度值存入数组PinHArry中,选出数组中最小的值

Math.min.apply(null,pinHArr),后面的Pin元素(aPin[i])放到数组中最小值所对应的的列的下面。

即,设置aPin[i]的position为:绝对定位,top为数组中最小值,left为数组中最小值对应列的offsetLeft

8)把新添加的元素块的高度offsetHeight,叠加到数组中最小的数值上

102535_Vmpj_3176241.png

111239_HD44_3176241.png

9)checkscrollside():判断是否需要加载后台的图片(判断依据是:目前最后一张图片是否有超过一半的度露在浏览器页面上)

蓝线的高度:lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offestHeight/2)

黑线的高度:滚走的距离+浏览器的距离

滚走的 距离:scrollTop=document.documentElement.scrollTop||document.body.scrollTop;

浏览器的距离:documentH=document.documentElement.clientHeight

如果蓝线小于黑线(黑线变长,使滚动到了最后一个图片的一半时),返回TRUE,表明要加载后台图片。

6、JQuery实现

172628_hXpZ_3176241.png

ps:

1、each的用法


173349_56pi_3176241.png

each用法:each() 方法规定为每个匹配元素规定运行的函数。提示:返回 false 可用于及早停止循环。

$(selector).each(function(index,element))

参数描述
function(index,element)必需。为每个匹配元素规定运行的函数。
  • index - 选择器的 index 位置。
  • element - 当前的元素(也可使用 "this" 选择器)。

获取当前遍历的元素的方法:

$(value)或者 $aPin.eq( index )

173517_gojV_3176241.png

三、搜索框制作

1、前期知识准备

181231_dCdp_3176241.png

181407_2rEg_3176241.png

1、按钮:

1)input 的使用:

type = submit时,有个不同于type = button 的属性就是,可以不借助任何js的代码,可以实现把表单内容提交到服务器。

此时,input 标签需要放置到 form 标签当中

form 标签的属性 action 表单将要提交到服务器的端口

target _blank 搜索的结果将在新的标签页显示

method 取值为get 或 post

2)input 的局限性

由于input是自闭合的标签,所以不能定义复杂样式的按钮,比如图文混排的按钮。如要实现图文混排的按钮效果,可以使用button 标签,把图片标签嵌套在button标签里面

22090010_TjWO.jpg

181143_ivXc_3176241.png

2、简单搜索框制作

183718_hOrZ_3176241.png

1)搭建框架:

184046_IeTF_3176241.png

效果:    184111_mahA_3176241.png

2)

192406_gDh0_3176241.png

效果:  192441_B07N_3176241.png

3)

192842_49QM_3176241.png

192859_RftZ_3176241.png

效果:  193033_8aoQ_3176241.png

4)

193118_IS4d_3176241.png

效果: 193147_f4FQ_3176241.png

5)目前效果:193558_xTPj_3176241.png,使输入框和按钮对齐。

194042_avkZ_3176241.png

效果:193938_czs7_3176241.png

6)

194408_5lEw_3176241.png

效果:194438_AuhL_3176241.png

7)

195048_1ign_3176241.png

效果:

194738_GVmk_3176241.png

8)

195507_WG8m_3176241.png

效果:

195534_Qqmp_3176241.png

3、智能提示搜索框制作

195924_MSoM_3176241.png

201427_n0Kn_3176241.png

1)静态页面框架搭建:

(1)

203936_mnsC_3176241.png

把列表隐藏,为之后动态显示做准备。

203826_GUtG_3176241.png

(2)

202652_T2Mu_3176241.png

202847_9d1P_3176241.png

(3)

203641_I6zc_3176241.png

 203523_cpxx_3176241.png

2)jQuery实现动显示搜索建议列表

204909_V2uu_3176241.png

 

205239_QoXW_3176241.png

(1)jQuery实现在搜索框中输入时显示提示列表

214711_bDUU_3176241.png

214730_KEKS_3176241.png

(2)jQuery实现AJAX:从后台的的数据中拿到提示列表要显示的文本。

215509_LsTL_3176241.png

url:发送请求的url,

callback:

100810_cYhq_3176241.png

100854_iCl7_3176241.png

(3)点击其他的地方,列表隐藏

101408_sybr_3176241.png

(4)点击建议列表中内容,实现跳转

101534_BsEK_3176241.png

102041_8OkU_3176241.png

3)JS实现动显示搜索建议列表

103952_Mhts_3176241.png

104805_mKY6_3176241.png

105028_ZEki_3176241.png

 

104307_zBvi_3176241.png

104251_YNd9_3176241.png

4)JS实现AJAX

131238_phoI_3176241.png

ps:

132039_axzl_3176241.png

向服务器发送请求

如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() send() 方法:

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
方法描述
open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)
send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求

GET 还是 POST?

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

4、淘宝搜索框

164950_gWGN_3176241.png

1)搭建框架:

HTML

170952_HKyo_3176241.png

css:

171454_UIvY_3176241.png

171632_4xPE_3176241.png

效果:

171737_tLkb_3176241.png

2)添加小图标

165015_CBER_3176241.png

在CSS中使用字符集

165343_e07u_3176241.png

url为字符集图片对应的字符路径

165717_Jz8y_3176241.png

170155_BmKw_3176241.png

165545_RoP7_3176241.png

效果:

170243_z8W6_3176241.png

3)添加语音搜索

172101_HKXw_3176241.png

172249_wjyG_3176241.png

4)切换菜单制作(静态效果)

HTML实现:

172652_IyGh_3176241.png

css: 

(1)

172817_wgVn_3176241.png   效果:172850_qaJq_3176241.png

(2)

173253_ukqz_3176241.png  

 173439_p5Ze_3176241.png    效果:173515_qhZ3_3176241.png

(3)

174050_KxuI_3176241.png

174205_TyOr_3176241.png 

174350_7AOQ_3176241.png

174437_IKXb_3176241.png效果: 174509_6rq4_3176241.png

5)切换菜单(动态效果)

(1)移入鼠标,展开菜单。原理:把高度从39px变成78px。

180033_EPZ4_3176241.png     

180058_xz0i_3176241.png

(2)鼠标移入到某li上,此li高亮。

175239_og9Y_3176241.png

(3)点击某li,把列表收起来,并且此li放入搜索位置左侧,另外的li隐藏。

180502_gcuF_3176241.png

转载于:https://my.oschina.net/u/3176241/blog/835738

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值