用CSS创建一个循环菜单

前端之家收集整理的这篇文章主要介绍了用CSS创建一个循环菜单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为一个学校项目在CSS中创建一个循环菜单

这就是菜单的样子:

我不是在寻找完整的来源只是一个想法,你如何有经验的开发人员会这样做。

我正在想要创建8个三角形,然后在中间放置一个带绝对位置的圆环div;但是三角形因为它们是用边框创建的,所以当你悬停它们时,它们不是绝对可选的。这有点儿麻烦

甚至可以创建没有图像吗?

编辑:

菜单后会通过动画使用jQuery;因此我将使用jQuery和jQuery UI,但没有其他库和没有图像(我不需要图标反正)。
至于兼容性,应该适用于IE9 / Chrome / Opera 11.52 / Firefox 4。

@H_403_15@

解决方法

以下是使用HTML画布进行操作的方法,它可以检测鼠标的完美位置。它看起来并不完全一样,我没有添加图标或分界线(虽然反锯齿允许背景通过一些区域之间显示出绘制线条的错觉)。

http://jsfiddle.net/jcubed111/xSajL/

编辑 – 错误修复:http://jsfiddle.net/jcubed111/xSajL/2/

随着更多的工作,您可以使画布版本看起来与您的模型相同,我的版本只是为了使功能下降。

您也可以使用css看起来正确,然后重叠一个清除以检测鼠标位置并提供链接功能。当然,你不能使用:徘徊改变地区的外观。

我已经在Chrome 19测试了。

以下是下面的完整代码,以防链接断开:

HTML:

<a id='link'><canvas id='c' width='224' height='224' onmousemove="update(event);"></canvas></a>
<input id='i' />​​​​​​​​

CSS:

#c{
    width:224px;
    height:224px;
}​

JS(运行在页面加载并使用jquery):

ctx = $('#c')[0].getContext('2d');


function update(E) {
    ctx.clearRect(0,224,224);
    if (E === false) {
        mx = 112;
        my = 112;
    } else {
        mx = E.clientX;
        my = E.clientY;
    }

    mangle = (-Math.atan2(mx-112,my-112)+Math.PI*2.5)%(Math.PI*2);
    mradius = Math.sqrt(Math.pow(mx - 112,2) + Math.pow(my - 112,2));

    $('#i').val("Not over any region");
    $('#link').attr('href','');
    for (i = 0; i < 8; i++) {
        angle = -Math.PI / 8 + i * (Math.PI / 4);

        if (((mangle > angle && mangle < (angle + Math.PI / 4)) || (mangle > Math.PI*15/8 && i==0)) && mradius<=112 && mradius>=69) {
            ctx.fillStyle="#5a5a5a";
            $('#i').val("In region "+i);
            $('#link').attr('href','#'+i);
        } else {
            ctx.fillStyle="#4c4c4c";
        }

        ctx.beginPath();
        ctx.moveTo(112,112);
        //ctx.lineTo(112+Math.cos(angle)*112,112+Math.sin(angle)*112);
        ctx.arc(112,112,angle,angle + Math.PI / 4,false);
        ctx.lineTo(112,112);
        ctx.fill();


    }

    ctx.fillStyle = "#f2f2f2";
    ctx.beginPath();
    ctx.arc(112,69,2 * Math.PI,false);
    ctx.fill();
}

update(false);​
@H_403_15@ @H_403_15@

猜你在找的CSS相关文章