首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery圆角滑块

jQuery圆角滑块
EN

Stack Overflow用户
提问于 2012-04-17 14:20:06
回答 3查看 9.1K关注 0票数 4

我想做一个圆形滑块,如下图所示。jQuery能做到这一点吗?

我知道直线滑块的工作原理,但我想做一个HTML5圆滑块。这是我在网上找到的http://jsfiddle.net/XdvNg/1/ --但我不知道如何获得用户放手的滑块值

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-20 22:17:07

这是我想出来的:

jsBin demo

代码语言:javascript
运行
复制
$(function () {
    var $circle = $('#circle'),
        $handler = $('#handler'),
        $p = $('#test'),
        handlerW2 = $handler.width()/2,
        rad = $circle.width()/2,
        offs = $circle.offset(),
        elPos = {x:offs.left, y:offs.top},
        mHold = 0,
        PI2 = Math.PI/180;
    $handler.mousedown(function() { mHold = 1; });
    $(document).mousemove(function(e) {
        if (mHold) {
            var mPos = {x:e.pageX-elPos.x, y:e.pageY-elPos.y},
                atan = Math.atan2(mPos.x-rad, mPos.y-rad),
                deg  = -atan/PI2+180,
                perc = (deg*100/360)|0,
                X = Math.round(rad*  Math.sin(deg*PI2)),    
                Y = Math.round(rad* -Math.cos(deg*PI2));
            $handler.css({left:X+rad-handlerW2, top:Y+rad-handlerW2, transform:'rotate('+deg+'deg)'});
        }
    }).mouseup(function() { mHold = 0; });
});
票数 10
EN

Stack Overflow用户

发布于 2012-09-13 17:46:25

下面是Roko脚本的改进版本:

为了计算鼠标位置,我使用了事件偏移量(firefox的小修复),如果事件目标不是#rotationSliderContainer,则进行更正。我也增加了90度的倍数的吸引力。

代码语言:javascript
运行
复制
$(function(){
    var $container = $('#rotationSliderContainer');
    var $slider = $('#rotationSlider');
    var $degrees = $('#rotationSliderDegrees');

    var sliderWidth = $slider.width();
    var sliderHeight = $slider.height();
    var radius = $container.width()/2;
    var deg = 0;    

    X = Math.round(radius* Math.sin(deg*Math.PI/180));
    Y = Math.round(radius*  -Math.cos(deg*Math.PI/180));
    $slider.css({ left: X+radius-sliderWidth/2, top: Y+radius-sliderHeight/2 });

    var mdown = false;
    $container
    .mousedown(function (e) { mdown = true; e.originalEvent.preventDefault(); })
    .mouseup(function (e) { mdown = false; })
    .mousemove(function (e) {
        if(mdown)
        {

            // firefox compatibility
            if(typeof e.offsetX === "undefined" || typeof e.offsetY === "undefined") {
               var targetOffset = $(e.target).offset();
               e.offsetX = e.pageX - targetOffset.left;
               e.offsetY = e.pageY - targetOffset.top;
            }

            if($(e.target).is('#rotationSliderContainer'))
                var mPos = {x: e.offsetX, y: e.offsetY};
            else
                var mPos = {x: e.target.offsetLeft + e.offsetX, y: e.target.offsetTop + e.offsetY};

            var atan = Math.atan2(mPos.x-radius, mPos.y-radius);
            deg = -atan/(Math.PI/180) + 180; // final (0-360 positive) degrees from mouse position 


            // for attraction to multiples of 90 degrees
            var distance = Math.abs( deg - ( Math.round(deg / 90) * 90 ) );

            if( distance <= 5 )
                deg = Math.round(deg / 90) * 90;

            if(deg == 360)
                deg = 0;

            X = Math.round(radius* Math.sin(deg*Math.PI/180));
            Y = Math.round(radius*  -Math.cos(deg*Math.PI/180));

            $slider.css({ left: X+radius-sliderWidth/2, top: Y+radius-sliderHeight/2 });              

            var roundDeg = Math.round(deg);

            $degrees.html(roundDeg + '&deg;');
            $('#imageRotateDegrees').val(roundDeg);

        }
    });
});
票数 4
EN

Stack Overflow用户

发布于 2015-07-14 02:24:27

这是你需要的jQuery roundSlider插件,它在移动设备和触摸设备上也工作得很好。

此圆形滑块具有与jQuery ui滑块类似的选项。它支持默认、最小范围和范围滑块类型。不仅是圆形滑块,它还支持各种circle shapes,如四分之一,半和饼形圆形。

有关更多详细信息,请查看demosdocumentation页面。

请查看来自的演示

输出的屏幕截图:

您可以根据需要自定义外观。请查看以获取一些自定义外观。

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

https://stackoverflow.com/questions/10186135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档