【问题标题】:Color change by clicking object instead of drop down [closed]通过单击对象而不是下拉来更改颜色[关闭]
【发布时间】:2013-09-30 18:05:10
【问题描述】:

我几天前关注了the "Create HTML5 Canvas Drawing Board Within 5 Minutes!" tutorial,现在我想通过点击一个彩色对象来更改颜色。

http://bit.ly/18Gxu9h

我怎样才能摆脱<ul>的选择,并通过点击它们来选择颜色?

提前致谢!

【问题讨论】:

  • 当您单击 div 时,获取 id(为了无缝集成,将每个 id 命名为您想要的颜色并简单地应用它(尽管您必须修改每个实例)),然后设置它到画布绘制颜色。如果您使用现有的 ID,您将有几个 if 语句要编写
  • Off-topic as per: “关于您编写​​的代码问题的问题必须描述具体问题 - 并包括有效的代码来重现它 - 在问题本身中。请参阅SSCCE.org 以获得指导。”
  • 看看这个小提琴。答案贴在下面。 jsfiddle.net/Tnm4t
  • @Sparky 在我评论的其他 4 个 bajillion 问题上,你在哪里。 “代码。我们需要代码!!!”大声笑
  • @Jack,赚取更多代表,这样您就可以投票结束... cmets 不是强制性的。

标签: javascript jquery html css colors


【解决方案1】:

你有重复的 ID,你不能有,这是无效的 HTML。

我的建议:

HTML

<div id="container">
    <div id="board">
        <canvas id="myCanvas" width="1024px" height="500px"></canvas>
        <p>Kies een kleur:
            <select id="selectColorSel">
                <option data-id="colBlack" value="#000000" selected="selected">Zwart</option>
                <option data-id="colRed" value="#be1e28">Rood</option>
                <option data-id="colBlue" value="#479abd">Blauw</option>
                <option data-id="colGreen" value="#3bab4b">Groen</option>
                <option data-id="colOrange" value="#f3601b">Oranje</option>
                <option data-id="colYellow" value="#f6c910">Geel</option>
            </select>
        </p>
    </div>
    <!-- END board -->
    <div id="selectColorDiv">
        <div id="colBlue"></div>
        <div id="colRed"></div>
        <div id="colYellow"></div>
        <div id="colGreen"></div>
        <div id="colBlack"></div>
        <div id="colRed"></div>
        <div id="colYellow"></div>
        <div id="colGreen"></div>
    </div>
</div>

jQuery

window.onload = function () {
    var myCanvas = document.getElementById("myCanvas");
    var curColor = $('#selectColorSel option:selected').val();
    if (myCanvas) {
        var isDown = false;
        var ctx = myCanvas.getContext("2d");
        var canvasX, canvasY;
        ctx.lineWidth = 5;
        $(myCanvas)
            .mousedown(function (e) {
            isDown = true;
            ctx.beginPath();
            canvasX = e.pageX - myCanvas.offsetLeft;
            canvasY = e.pageY - myCanvas.offsetTop;
            ctx.moveTo(canvasX, canvasY);
        })
            .mousemove(function (e) {
            if (isDown != false) {
                canvasX = e.pageX - myCanvas.offsetLeft;
                canvasY = e.pageY - myCanvas.offsetTop;
                ctx.lineTo(canvasX, canvasY);
                ctx.strokeStyle = curColor;
                ctx.stroke();
            }
        })
            .mouseup(function (e) {
            isDown = false;
            ctx.closePath();
        });
    }
    $('#selectColorSel').change(function () {
        curColor = $('#selectColorSel option:selected').val();
    });
    $('#selectColorDiv div').click(function () {
        var sel = $('[data-id="' + this.id + '"]').val();
        $('#selectColorSel').val(sel);
         curColor = $('#selectColorSel option:selected').val();
    });
};

演示here

【讨论】:

  • 谢谢,这帮助很大。当我单击一种颜色时,UL 部分会发生变化,但颜色保持不变。
  • @YouGo,是的,我现在修好了。 jsfiddle.net/bsPUt/1
  • 哈哈,你是老板!非常感谢老兄!
  • 好家伙...你帮助一个人完成了他的任务。
  • @vishalkin,我们随时为您提供帮助!
【解决方案2】:

http://jsfiddle.net/Tnm4t/

<script type="text/javascript">
    function myFunction(){
       var color = document.getElementById('selectColor').value;

        document.getElementById('colBlack').style.display = "none";    
        document.getElementById('colBlue').style.display = "none";    
        document.getElementById('colRed').style.display = "none";    
        document.getElementById('colGreen').style.display = "none";    
        document.getElementById('colOrange').style.display = "none";    
        document.getElementById('colYellow').style.display = "none";

        document.getElementById(color).style.display = "block";

    }
</script>

<p>Kies een kleur:<select id="selectColor" onchange="myFunction()">
                      <option value="colBlack" selected="selected">Zwart</option>
                      <option value="colRed">Rood</option>
                      <option value="colBlue">Blauw</option>
                      <option value="colGreen">Groen</option>
                      <option value="colOrange">Oranje</option>
                      <option value="colYellow">Geel</option>
                      </select>
    </p>
<div id="selectedColor">
        <div id="colBlue"></div>
        <div id="colRed"></div>
        <div id="colYellow"></div>
        <div id="colOrange"></div>
        <div id="colGreen"></div>       
        <div id="colBlack"></div>           
    </div>

CSS

#selectedColor div{
    display:none;
}
#colBlack {background-color:#000; height:100px; width:128px; float:left;}
#colRed {background-color:#be1e28; height:100px; width:128px; float:left;}
#colBlue {background-color:#479abd; height:100px; width:128px; float:left;}
#colYellow {background-color:#f6c910; height:100px; width:128px; float:left;}
#colGreen {background-color:#3bab4b; height:100px; width:128px; float:left;}
#colOrange {background-color:#ffa500; height:100px; width:128px; float:left;}

误读 OP 问题,编辑小提琴。

【讨论】:

  • OP 有一个&lt;canvas&gt; 应该连接到选择。此代码也有重复的 ID
  • @Sergio,没有重复的 ID。无论如何,我误读了他的问题,我以为他想隐藏盒子。我会修正我的答案,但在编辑之前再次阅读我的答案并告诉我您是否看到任何重复的 ID。
  • 真的!没有重复的 ID 我是现在阅读速度最快的人。
  • 如果你对我投了反对票,请删除。谢谢。
  • 在 CSS 中将 display:none 添加到 select 标签的 id 中。 jsfiddle.net/bsPUt/2
猜你喜欢
  • 2016-04-05
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多