javascrpit-jquery toggle()切换两个函数时报错

问题描述

jquery toggle()切换两个函数时报错

$(function() {
var sideRight = $('#sideright');
$('.side-icon').each(function(index){
$(this).toggle(function(){
changeManyElem(sideRight,{'right':0},30);
},function(){
changeManyElem(sideRight,{'right':-350},30);
})
})
})

function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
function changeManyElem(obj, json, spd, fn) {
var flag = true;
clearInterval(obj.timer);
obj.timer = setInterval(function() {
for (var attr in json) {
var icur = 0;
if (attr == 'opacity') {
icur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
icur = parseInt(getStyle(obj, attr));
}
var speed = 0;
speed = (json[attr] - icur) / 10;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (icur != json[attr]) {
flag = false;
}
if (attr == 'opacity') {
obj.style[attr] = (icur + speed) / 100;
} else {
obj.style[attr] = icur + speed + "px";
}
}
if (flag) {
clearInterval(obj.timer);
if (fn) {
fn();
}
}
}, spd);
}

解决方案

 粗看了一下
 $(function() {
var sideRight = $('#sideright');//这里获取的是jquery对象
$('.side-icon').each(function(index){
$(this).toggle(function(){
changeManyElem(sideRight,{'right':0},30);//传入的是jquery对象
},function(){
changeManyElem(sideRight,{'right':-350},30);
})

看这里使用
function getStyle(obj, attr) {//这里obj使用的还是jquery对象,这就不对了,style获取是dom节点,还有像obj.style[attr],这也是dom方式
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}

改一下
$(this).toggle(function(){
changeManyElem(sideRight,{'right':0},30);//传入的是jquery对象
},function(){
changeManyElem(sideRight,{'right':-350},30);
})
这段改成,把sideRight改成sideRight[0],传入dom节点
$(this).toggle(function(){
changeManyElem(sideRight[0],{'right':0},30);//
},function(){
changeManyElem(sideRight[0],{'right':-350},30);
})

解决方案二:

都倒入jquery的干嘛还是用原声的js获取对象样式。。getStyle你用的原生的js,你就要传如dom对象而不是jquery包装后的对象

     $(function () {
        var sideRight = $('#sideright');
        var flag = true;
        $('.side-icon').click(function () {
            flag = !flag;
            sideRight.animate({ 'right': flag ? 0 : -350 }, 30);
            console.log(flag)
        })
    })
时间: 2024-10-31 20:01:47

javascrpit-jquery toggle()切换两个函数时报错的相关文章

sql-db2使用用户自定义函数时报错

问题描述 db2使用用户自定义函数时报错 自定义函数如下:create function a(@sno char(6)) returns table(couname char(20)score int ) language sql reads sql data no external action deterministic return (select cnamescore from gradecourse where grade.sno=@sno and grade.cno=course.c

jquery toggle()方法

问题描述 jquery toggle()方法 各位大神请问,这个代码运行时元素都隐藏了.这是怎么回事啊.代码见图.妹子我前端菜鸟一枚,第一次提问^_^ 解决方案 下面两个应该有你需要的效果,如果content那个div默认显示,就把show和hide的位置对调 $("#panel h5.head").toggle(function(){ $(this).next().show(); },function(){ $(this).next().hide(); }) $("#pan

分享一些常用的jQuery动画事件和动画函数_jquery

部分jQuery常用的动画函数,整理了一下,在做交互式页面的时候挺有用的 .css('a','12px'); .css({ a:'12px', b:'#fff' }); .show(); .hide(); .toggle(); .fadeIn(); .fadeOut(); .fadeToggle(); .slideDown(); .slideUp(); .slideToggle(); .text('string'); .animate({ a:'40px', b:'ccc' },200) .fa

jQuery中常用动画效果函数(日常整理)_jquery

jquery中动画效果非常多,下面小编给大家分享一下jquery中的动画函数. jQuery的效果函数列表: animate():对被选元素应用"自定义"的动画. clearQueue():对被选元素移除所有排队的函数(仍未运行的). delay():对被选元素的所有排队函数(仍未运行)设置延迟. dequeue():运行被选元素的下一个排队函数. fadeln():逐渐改变被选元素的不透明度,从隐藏到可见. fadeOut():逐渐改变被元素的不透明度,从可见到隐藏. fadeTo(

JQuery toggle使用分析_jquery

今天重点一个toggle(fn,fn,-.)函数,主要是用来切换某个事件的轮换操作. 比如:对一个按钮的点击事件和一个DIV的背景,点击一次按钮,将DIV的背景显示为蓝色,点击第二次的时候要将DIV的 背景色改为黑色. 我们定义的HTML代码如下: <body> <input type="button" id="btnShow" value="Toggle"/> <div id="DivToggle&quo

jQuery插件制作之全局函数用法实例

  本文实例讲述了jQuery插件制作之全局函数用法.分享给大家供大家参考.具体分析如下: 1.添加新的全局函数 所谓的全局函数,实际上就是jQuery对象的方法,但从实践的角度上看,他们是位于jQuery命名空间内部的函数 (1)添加一个函数,只需要将新函数指定为jQuery对象的一个属性. ? 1 2 3 jQuery.five =function(){ alert("直接继承方式不一样"); } 调用: 代码如下: $.five(); (2)添加多个函数 ? 1 2 3 4 5

jquery自动切换tabs选项卡的具体实现

 这篇文章主要介绍了jquery自动切换tabs选项卡的具体实现,有需要的朋友可以参考一下 本节内容: jquery实现自动切换选项卡.   代码:   代码如下: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% String path = request.getContextPath();  %&

jQuery支持动态参数将函数绑定到事件上的方法

这篇文章主要介绍了jQuery支持动态参数将函数绑定到事件上的方法,实例分析了两种支持动态参数的函数绑定技巧,需要的朋友可以参考下     本文实例讲述了jQuery支持动态参数将函数绑定到事件上的方法.分享给大家供大家参考.具体分析如下: 下面的js代码提供了两种方法用于绑定函数到事件,其中方法二可以传递动态参数,非常实用 ? 1 2 3 4 5 6 7 8 9 //方法一 $('#foo').click(function(event) { alert('User clicked on "fo

jQuery插件制作之全局函数用法实例_jquery

本文实例讲述了jQuery插件制作之全局函数用法.分享给大家供大家参考.具体分析如下: 1.添加新的全局函数 所谓的全局函数,实际上就是jQuery对象的方法,但从实践的角度上看,他们是位于jQuery命名空间内部的函数 (1)添加一个函数,只需要将新函数指定为jQuery对象的一个属性. jQuery.five =function(){ alert("直接继承方式不一样"); } 调用: 复制代码 代码如下: $.five(); (2)添加多个函数 jQuery.five =func