首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我需要更新我的jQuery代码

我从CSSTRICKS得到了一段代码,神奇的行导航,它将在我的菜单项下放置一条线,并将移动到我悬停的菜单项上。我希望它是这样的,当我单击菜单时,行将停留在该菜单项,而不是像往常一样返回到第一个菜单项。

该脚本使用一个类选择器来告诉我们在默认情况下该行应该放在哪里。这样,我用jQuery创建了一个toggleClass,它将类传递给单击的菜单项,但它不会更新。我必须重新加载页面才能更新。再一次,它被卡在相同的位置。我希望有人知道怎么做。下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(window).bind("load", function () {
    var $el, leftPos, newWidth;
    $mainNav2 = $("#example-two");

    /*
    EXAMPLE ONE
*/

    /* Add Magic Line markup via JavaScript, because it ain't gonna work without */
    $("#line-menu").append("<li id='magic-line'></li>");

    /* Cache it */
    var $magicLine = $("#magic-line");

    $magicLine.width($(".current_page_item").width())
        .css("left", $(".active a").position().left)
        .data("origLeft", $magicLine.position().left)
        .data("origWidth", $magicLine.width());

    $("#line-menu li").find("a").hover(function () {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.parent().width();

        $magicLine.stop().animate({
            left: leftPos,
            width: newWidth
        });
    }, function () {
        $magicLine.stop().animate({
            left: $magicLine.data("origLeft"),
            width: $magicLine.data("origWidth")
        });
    });
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-30 18:42:59

将magicline移到它自己的函数中。编辑内容注释如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  $(document).ready(function(){
        magicline();
    });

function magicline() {

    var $el, leftPos, newWidth,
        $mainNav = $("#example-one");
    //remove the old magic line before creating a new one.
    $("#magic-line").remove();
    $mainNav.append("<li id='magic-line'></li>");
    var $magicLine = $("#magic-line");

    $magicLine
        .width($(".current_page_item").width())
        .css("left", $(".current_page_item a").position().left)
        .data("origLeft", $magicLine.position().left)
        .data("origWidth", $magicLine.width());

    $("#example-one li a").hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.parent().width();
        $magicLine.stop().animate({
            left: leftPos,
            width: newWidth
        });
    }, function() {
        $magicLine.stop().animate({
            left: $magicLine.data("origLeft"),
            width: $magicLine.data("origWidth")
        });    
    });
}
//on click on a new menu item iterate through and remove the class
//then add the class back to the parent of the a clicked and recall the 
//magicline function
$('li a').on('click',function(){
    $('li').each(function(){ 
       $(this).removeClass('current_page_item');               
    });
    $(this).parent().addClass('current_page_item');
    magicline();
});

演示:http://jsfiddle.net/calder12/vtuKH/1/

PS。我使用了CSSTRICKS中的代码,您必须更改id以匹配您的id。

票数 1
EN

Stack Overflow用户

发布于 2013-03-30 19:11:17

我或多或少猜到了CSS和标记,但这要简洁得多:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(window).bind("load", function () {
    var $lineMenu = $("#line-menu"),
        $active = $lineMenu.children('.current_page_item'),
        $magicLine = $("<li id='magic-line'></li>");

    $magicLine
        .width($active.width())
        .css("left", $active.position().left)
        .appendTo($lineMenu);

    $lineMenu.on('mouseenter mouseleave click', 'li:not(#line-menu)', function (e) {
        var $el = e.type == 'mouseleave' ? $active : $(this);

        if (e.type == 'click') {
            $el.addClass('active').siblings().removeClass('active');
            $active = $el;
        } else {
            $magicLine.stop().animate({
                left: $el.position().left,
                width: $el.width()
            });
        }
    });
});

http://jsfiddle.net/userdude/tTsk6/

票数 1
EN

Stack Overflow用户

发布于 2013-03-30 18:18:14

这行返回到原来的位置,因为有回调附加到hover。在这种情况下,您需要做的是,当单击菜单项时,您需要避免该行转到原始位置。

我是这么做的-

附加点击处理程序,当用户点击菜单项时,设置一个标志来显示菜单被选中。在hover的回调函数中检查此标志,如果设置则返回。否则,如果不是平面设置,则将直线移至前一位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var $magicLine = $("#magic-line");
var isClicked = false;  // to show whether menu is clicked or not

$magicLine.width($(".current_page_item").width())
    .css("left", $(".active a").position().left)
    .data("origLeft", $magicLine.position().left)
    .data("origWidth", $magicLine.width());

$("#line-menu li").find("a").hover(function () {
    $el = $(this);
    leftPos = $el.position().left;
    newWidth = $el.parent().width();

    $magicLine.stop().animate({
        left: leftPos,
        width: newWidth
    });
}, function () {
   if(!isClicked){         // if no item is clicked, take line to old position
      $magicLine.stop().animate({
          left: $magicLine.data("origLeft"),
          width: $magicLine.data("origWidth")
      });
    }else{                 // else, just keep it there  
       isClicked = false;
       return false;
    }
}).click(function(e){   // added click listener 
    isClicked = true;       // flag is set to indicate menu item is clicked.
    $magicLine.css({
        left: leftPos,
        width: newWidth
    });                             
});

首先,我认为unbinding hover会阻止回调被调用,但这并没有实现。所以我用旗帜试了试。请阅读代码注释,我没有将所有内容都放在答案中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15721499

复制
相关文章
使用OAuth 2.0访问谷歌的API
谷歌的API使用的OAuth 2.0协议进行身份验证和授权。谷歌支持常见的OAuth 2.0场景,如那些Web服务器,安装,和客户端应用程序。
拿我格子衫来
2022/01/24
4.5K0
使用OAuth 2.0访问谷歌的API
从0开始构建一个Oauth2Server服务 <18> AccessToken
访问令牌是应用程序用来代表用户发出 API 请求的东西。访问令牌代表特定应用程序访问用户数据的特定部分的授权。
用户1418987
2023/10/16
2520
从0开始构建一个Oauth2Server服务 <18> AccessToken
持续发布 Chrome 插件
Chrome 插件对于 Chrome 浏览器用户来说是必不可少的利器之一。之前我有开发过一款七牛云图床的 Chrome 插件 image-host。后来由于我自己没有自己的域名,所以不太好使用这个插件了。后面,有其他的同学来提交 PR 来维护这一个插件。这样就有一个问题,一旦新的代码发布,就需要自己再重新发布一下插件。虽然发布插件不算特别麻烦,打包成压缩包,上传就可以了,但是对于程序员来说,可以自动做的绝对不要手动做。以下就是通过 CircleCI 来持续发布 Chrome 插件,参考了官方的文章,自己也才了一些坑。
madneal
2019/11/28
8050
Yii2实现QQ互联登录
Yii2中OAuth扩展及QQ互联登录的方法,实例分析了OAuth扩展的相关配置与QQ互联登陆的实现技巧。
botkenni
2019/09/02
1.2K0
OAuth2.0认证解析
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
FB客服
2020/11/16
4.4K0
OAuth2.0认证解析
OAuth 2.0 的四种方式
上一篇文章介绍了 OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。本文接着介绍颁发令牌的实务操作。 下面我假定,你已经理解了 OAuth 2.0 的含义和设计思想,否则请先阅读这个系列的上一篇文章。
辉哥
2019/05/17
6000
Github登录使用oAuth 2.0的更改API通知
 On February 18th, 2020 at 03:24 (UTC) your application (********) used an access token **********) as part of a query parameter to access an endpoint through the GitHub API:
KEVINGUO_CN
2020/03/16
1.1K0
【OIDC】基本概念
注意:不是 OAuth2.0 无法完成认证,而是 OAuth2.0 本身的认证过程缺乏统一的标准。
tonglei0429
2022/10/04
1.6K0
OAuth2.0协议详解
更多可以访问:https://tools.ietf.org/html/rfc6749
山行AI
2019/06/28
1.5K0
google支付回调验证(备用)
20150218,挂机的日本服务器出现google支付被刷单现象,虽然目前进行的修补,但是这个问题并没有完全从根源上解决。并且公司以前的GooglePlay支付也有不完善的地方,在SDK端给支付回调发送支付信息后,支付回调程序没有调用Google API进行订单验证。因此Google支付流程需要进行完善。
全栈程序员站长
2022/07/12
3.7K0
google支付回调验证(备用)
从0开始构建一个Oauth2Server服务 <6> 移动和本机应用程序
与单页应用程序一样,移动应用程序也无法维护客户机密。因此,移动应用程序还必须使用不需要客户端密码的 OAuth 流程。当前的最佳做法是将授权流程与 PKCE 一起使用,同时启动外部浏览器,以确保本机应用程序无法修改浏览器窗口或检查内容。
用户1418987
2023/10/16
2080
从0开始构建一个Oauth2Server服务 <6> 移动和本机应用程序
喜大普奔,Gitee最新版本API推出了以gitee作为资源认证服务器的的OAuth2认证
本文来源:https://gitee.com/api/v5/oauth_doc#/
用户3587585
2022/09/21
1.7K0
喜大普奔,Gitee最新版本API推出了以gitee作为资源认证服务器的的OAuth2认证
腾讯云API网关的OAuth 2.0集成
API网关是腾讯云上流量治理的产品,一般起到承载流量入口的能力。它提供 API 托管服务,能提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。
Yagr Xu
2021/12/02
2.3K0
手把手教你调用百度人脸识别API
现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。
互扯程序
2018/07/30
19.4K1
手把手教你调用百度人脸识别API
一口气说出 OAuth2.0 的四种授权方式
OAuth 简单理解就是一种授权机制,它是在客户端和资源所有者之间的授权层,用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后,客户端携带令牌可以访问资源所有者的资源。
程序员小富
2020/07/13
1.4K0
一口气说出 OAuth2.0 的四种授权方式
PHP调用微博接口实现微博登录的方法示例
在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。
子润先生
2021/07/13
5940
一口气说出 OAuth2.0 的四种授权方式
上周我的自研开源项目开始破土动工了,[《开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石
程序员小富
2020/07/07
8560
一口气说出 OAuth2.0 的四种授权方式
REST API 的安全认证,从 OAuth 2.0 到 JWT 令牌
来源:blog.biezhi.me/2019/01/rest-security-basics.html
芋道源码
2020/09/24
2.9K0
REST API 的安全认证,从 OAuth 2.0 到 JWT 令牌
点击加载更多

相似问题

Google oauth2.0,缺少必需的参数: grant_type

10

Google OAuth2:缺少必需的参数: grant_type

23

Google Analytics API :缺少必需的参数: grant_type

11

Google API OAuth 2.0标题:缺少必需的参数: response_type

23

Google Buzz API -无法解决错误:“缺少必需的参数- grant_type”

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文