旋转jqueryUI模式的问题

时间:2016-04-15 22:01:45

标签: javascript jquery jquery-ui

我正在尝试使用$(.linkmoddet)根据导航栏$('.selectcircle')中的点击元素构建转换为特定元素的模式.switchClass jQueryUI 中的函数。

但是,我遇到的实际数学问题经常导致:

  • 一次只能旋转一两个元素。
  • 多个元素获得类但不会丢失它们。
  • 偶尔会丢失所有涉及的类,将有问题的元素默认为CSS中的标准大小和位置。

代码

编辑:现在已修复此问题。

http://codepen.io/yeasayer/pen/ZWxYZG

var selectcircle = $('.selectcircle');
var linkmoddet = $('.linkmoddet');
selectcircle.click(function(){
    var circleindex = $(this).index()-1;
    var centerindex;
    console.log(circleindex);
    selectcircle.each(function (index){
        if (circleindex == index)
        {
            console.log($(this));
        }
    });
    linkmoddet.each(function (index){
        if ($(this).hasClass('moddetcenter'))
        {
            centerindex = $(this).index();
            console.log("the center is index #"+centerindex);
        }
        var rotation = centerindex - circleindex;
//This is where I start having issues.
        var i = $(this).index() + rotation;
        var j;
        if (i <= -1)
        {
            j = i + moddetids.length-1;
            $(this).switchClass(classes[i+$(this).index()],classes[j]);
        }
        if (i >= moddetids.length)
        {
            j = i - moddetids.length;
            $(this).switchClass(classes[i-$(this).index()],classes[j]);
        }
        else
        {
            if (rotation < 0)
            {
                j = i-1;
            }
            else
            {
                j = i+1;
            }
            $(this).switchClass(classes[i], classes[j]);
        }
    });
});

有没有人知道如何以比上述更简单的方式达到预期效果?

1 个答案:

答案 0 :(得分:0)

好吧,事实证明我通过以下方式解决了这个问题:

linkmoddet.each(function (index){
        var classnum;
        var newrot;
        if ($(this).hasClass('moddetcenter'))
        {
            classnum = 2;
            if (rotation < 0)
            {
                rotation += classes.length;
            }
            if (classnum + rotation >= classes.length)
            {
                newrot = classnum + rotation - classes.length;
                $(this).switchClass(classes[classnum],classes[newrot]);
            }
            else if (rotation != 0)
            {
                $(this).switchClass(classes[classnum],classes[classnum+rotation]);
            }
        }
/* This is repeated for all the classes available in the classes array.
 * ie: 0 being the first class, 1 being the second, etc. It's not an 
 * elegant solution, but it works for my current needs at the moment  
 * while I put it in a function in the future. */

谢谢!