使用cavas标签+rangeSlider滑块插件动态调整扇形区域

先看Domel效果

代码

@section Styles{
<link href="~/Content/rangeSlider_css/ion.rangeSlider.css" rel="stylesheet" />
<link href="~/Content/rangeSlider_css/ion.rangeSlider.skinHTML5.css" rel="stylesheet" />
    }
<h2>动态调整扇形区大小</h2>
  <canvas id="bg" width="200" height="200" style="border:1px solid red;"></canvas>
<div style="width: 60%;">
    <div id="costRange"></div>
</div>     
@section scripts{
    <script src="~/Scripts/rangeSlider_js/ion-rangeSlider/ion.rangeSlider.min.js"></script>
<script>
    var bg = document.getElementById('bg');
    var cxt = bg.getContext('2d'); //创建context对象
    cxt.fillStyle = '#FF0000'; //设置或返回用于填充绘画的颜色、渐变或模式 染成红色
    cxt.strokeStyle = "#ff0000"; //设置或返回用于笔触的颜色、渐变或模式
    $(function () {
        $("#costRange").ionRangeSlider({
            type: "double",
            grid: true,
            min: 0,
            max: 360,
            from: 0,
            to: 30,         
            postfix: "度数"
        });
        draw(0, 30);
     
        $("#costRange").on("change", function () {
            var $this = $(this),
            value = $this.prop("value");
            var arr = value.split(";")
            draw(arr[0], arr[1]);
        });
    })
    function draw(start, end) {
        Close();
        Defultdraw();
        cxt.beginPath(); //起始一条路径,或重置当前路径
        cxt.moveTo(100, 100);//设置默认起始点
        console.warn("start:" + start); console.warn("end:" + end);
        cxt.arc(100, 100, 80, start * Math.PI / 180, end * Math.PI/180, false); //绘制一个中心点为(100,100),半径为80
        cxt.closePath(); //创建从当前点回到起始点的路径
        cxt.fill();//填充当前绘图(路径)  
        cxt.stroke(); //绘制已定义的路径
    }
    function Close() {
        var width = bg.width;
        var height = bg.height;
        cxt.clearRect(0, 0, width, height);
    }
    //默认空心圆
    function Defultdraw() {
        cxt.beginPath(); //起始一条路径,或重置当前路径
        cxt.arc(100, 100, 80,0, 2* Math.PI, false); //绘制一个中心点为(100,100),半径为80
        cxt.closePath(); //创建从当前点回到起始点的路径
        cxt.stroke(); //绘制已定义的路径
    }
</script>
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Canvas 中绘制扇形区域并添加事件,您可以按照以下步骤操作: 1. 在 Canvas 中绘制圆形,使用 `beginPath()` 方法开始路径,使用 `arc()` 方法绘制圆弧,使用 `closePath()` 方法关闭路径,最后使用 `fill()` 或 `stroke()` 方法填充或描边圆形。 2. 绘制扇形区域使用 `moveTo()` 方法将路径移动到圆心,使用 `lineTo()` 方法连接圆心和扇形边缘,最后使用 `closePath()` 方法关闭路径,再次使用 `fill()` 或 `stroke()` 方法填充或描边扇形区域。 3. 添加事件,使用 `addEventListener()` 方法为 Canvas 元素添加事件监听器。在事件处理程序中,您可以计算鼠标指针位置与圆心之间的距离和角度,以确定鼠标指针是否在扇形区域内。 下面是一个示例代码,展示如何在 Canvas 中绘制扇形区域并添加事件监听器: ```html <canvas id="myCanvas" width="400" height="400"></canvas> ``` ```javascript var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); var x = canvas.width / 2; var y = canvas.height / 2; var radius = 100; var startAngle = 0; var endAngle = Math.PI / 2; var anticlockwise = false; // 绘制圆形 ctx.beginPath(); ctx.arc(x, y, radius, 0, 2 * Math.PI); ctx.closePath(); ctx.stroke(); // 绘制扇形区域 ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x + radius * Math.cos(startAngle), y + radius * Math.sin(startAngle)); ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise); ctx.closePath(); ctx.fill(); // 添加事件监听器 canvas.addEventListener("click", function(event) { var rect = canvas.getBoundingClientRect(); var mouseX = event.clientX - rect.left; var mouseY = event.clientY - rect.top; var dx = mouseX - x; var dy = mouseY - y; var distance = Math.sqrt(dx * dx + dy * dy); var angle = Math.atan2(dy, dx); if (distance <= radius && angle >= startAngle && angle <= endAngle) { console.log("Clicked inside the sector!"); } }); ``` 在这个示例中,我们使用 `arc()` 方法绘制圆形,然后使用 `moveTo()` 和 `lineTo()` 方法连接圆心和扇形边缘,最后使用 `arc()` 方法绘制扇形区域。我们还使用 `fill()` 方法填充扇形区域。 在事件监听器中,我们首先计算鼠标指针位置与圆心之间的距离,然后计算鼠标指针位置与圆心之间的角度。如果鼠标指针在圆形区域内且在扇形区域内,则触发事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值