• 积跬步,聚小流------具有滑动效果的导航


    导航栏是站点的一个重要部分。具有良好动态效果的导航栏无疑会给站点添色不少,而水平动态导航栏就是当中一种,我一直非常喜欢,当然它分为非常多种。这里先来看当中一种效果。

    1、效果例子


    这个图片相信关注过这样的效果导航栏的人都非常熟悉了,我也是从这个入手慢慢入门滴...

    至于样式结构这里就不详述了。相信都不会怵头,这里上下jquery效果的代码:

    ; (function ($) {
        $.extend({
            'nicenav': function (con) {
                con = typeof con === 'number' ?

    con : 400; var $lis = $('#nav>li'), $h = $('#buoy') $lis.hover(function () { $h.stop().animate({ 'left': $(this).offsetParent().context.offsetLeft }, con); }, function () { $h.stop().animate({ 'left': '-157px' }, con); }) } }); }(jQuery));


    2、代码分析

    这样我们首先来一点点分析效果的代码实现原理:


    首先是最外层的 ;(function($){})(jQuery)是一个匿名函数。通常js库都採用这样的自执性的匿名函数来保护内部变量。至于前面的“;”则是为了防止多文件集成一个文件后,高压缩从而造成语法错误而加入的。(“大牛的做派”)


    而$.extend({});是我们在写插件中经常使用的extend扩展方法。像$.fn.extend({});也是这样,举个样例来说的话:

     $.extend({
      hello:function(){alert('hello');}
     });
    就是讲hello方法加入到jquery的全局变量中去,等调用的时候直接用$.hello()就可以,至于我们要分析的那段代码相同$.nicenav(參数)就可以。


    以上都是在写插件中经常使用到的基本知识,我们再来看下详细当前效果的实现代码。

    con = typeof con === 'number' ? con : 400;
    con是我们须要传递的參数,这里代表了“css完毕改变的时间”,也能够说是对应的速度。可是这个确实”数值越大。速度越慢“的。

    而js中的typeof函数是用来推断数值类型的。它返回的字符串可能有“number”,“String”,“boolean”,“object”,“function”和“undefined”。

    至于===?:则是我们熟悉的三元运算符。===代表了boolean,?代表了是否。:则代表了要么..要么..。

    这些都理解了的话。这句话的意思也就自然明确了,假设我们传递过来的參数是数字,那con继续为我们传递过来的那个数字。假设參数不是数字,那我们就默认赋给它一个400,则是防止其他不明确原理的人乱调用,从而错误发生。


    var $lis = $('#nav>li'), $h = $('#buoy')
    这句则就比較好理解了。仅仅是将对应的取值简写而已,一方面看起来美观,还有一方面假设出现更改的情况,能够降低工作量,典型的面向对象思想啊。


     $lis.hover(function () {
                    $h.stop().animate({
                        'left': $(this).offsetParent().context.offsetLeft
                    }, con);
                }, function () {
                    $h.stop().animate({
                        'left': '-157px'
                    }, con);
                })
    至于这段真正的逻辑,则是#nav>li的hover事件的响应。须要注意的一点是hover()括号的起止之间的方法体,并不一定仅仅有一个方法。这里就有两个。当hover事件发生时和hover事件失去时。不同的响应方法。

    animate({},time)方法是样式改变动态化,而stop()事件则是先停止,出如今这里,则是为反复运行事件时明白运行方法

    $(this).offsetParent().context.offsetLeft是父层和当前层的相对距离,offsetParent代表了第一个非流布局的父级的元素中。offsetLeft就是则就是相对于指定父级的左边距离,至于offsetLeft本身已经是针对于非流父级的。但还要用到上下文context,我当前得到的原因是:由于offset()返回的事实上是相对于文档的坐标,须要用jquery的offsetParent明白下父级,而position才是本身就是相对第一个非流布局的父级的元素中。


    通过以上解释。相信你也会非常清楚它的实现方法了吧,快点把它用到项目中吧。有没有棒棒哒...



  • 相关阅读:
    js object 常用方法总结
    深入研究js中的位运算及用法
    input事件中文触发多次问题研究
    景点地图开发实战
    炫酷线条动画--svg
    转:绝对干货--WordPress自定义查询wp_query所有参数详细注释
    canvas实例 ---- 制作简易迷宫(一)
    炫酷弹窗效果制作
    js排序算法总结—冒泡,快速,选择,插入,希尔,归并
    js 实现 promise
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6951469.html
Copyright © 2020-2023  润新知