You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为jQuery dRawr工具箱添加ID属性,解决多画布工具栏定位问题

解决jQuery Drawr多画布工具栏位置错位问题

问题原因

你循环中使用$('.drawr-toolbox').attr('id', 'toolbox-' + section)会选中页面上所有工具栏元素,把它们的ID全部替换成当前循环的section值。循环结束后,所有工具栏的ID都会变成最后一个section的数值,后续样式设置也只会作用于这个重复的ID(DOM中ID唯一,浏览器仅识别最后一个),最终导致所有工具栏位置完全相同且错误。

解决方案

无需给工具栏加ID也能精准定位,根据Drawr库的代码逻辑,工具栏会被插入到对应画布的父容器(即#drawr-container-"+section")的后面,直接通过父容器的next()方法获取对应工具栏即可,避免全局选择所有工具栏元素。

修改后的完整代码

var question_secs = <?php echo json_encode($question_section_arr); ?>;
var arrayLength = question_secs.length;
$(document).ready(function(){
    for (var i = 0; i < arrayLength; i++) {
        var section = question_secs[i];
        // 初始化画布为绘图区域
        $("#drawr-container-"+ section +" .demo-canvas-"+ section +"").drawr({
            "enable_transparency" : false
        });

        // 启用绘图模式,显示控件
        $("#drawr-container-"+ section +" .demo-canvas-"+ section +"").drawr("start");

        var offset = $("#canvas-"+ section +"").offset();
        var topoff = offset.top + 1127;
        var leftoff = offset.left - 83;

        // 精准获取当前画布对应的工具栏(父容器的下一个元素)
        var $currentToolbox = $("#drawr-container-" + section).next('.drawr-toolbox');
        // 可选:设置唯一ID(如果后续需要单独操作)
        $currentToolbox.attr('id', 'toolbox-' + section);
        // 设置工具栏位置
        $currentToolbox.css({top: topoff, left: leftoff, position:'absolute'});
    }
});

额外说明

如果Drawr库生成工具栏时自动添加了drawr-toolbox-<canvasId>类(对应库代码中的toolbox.className = "drawr-toolbox drawr-toolbox-" + id;),也可以直接通过这个类选择:

var $currentToolbox = $('.drawr-toolbox-canvas-' + section);

不过用父容器的next()方法更可靠,能避免因ID命名规则变化导致的选择失败。

内容的提问来源于stack exchange,提问作者Dylano236

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:52