2 qq 21325027 qq_21325027 于 2015.06.06 22:14 提问

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);
}

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.06 22:50
已采纳
 粗看了一下
 $(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);
})
showbo
showbo   Ds   Rxr 2015.06.07 17:46

都倒入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)
        })
    })
Csdn user default icon
上传中...
上传图片
插入图片