<div>
feDiffuseLighting.lighting-color =
<input id="lightingColor" type="color"value="#ffffff" oninput="onColorChange(arguments[0])" />
</div>
<div>
feDiffuseLighting.surfaceScale =
<input id="surfaceScale" type="number" step="1" value="1" oninput="onSurfaceScaleChange(arguments[0])" />
</div>
<div>
feDiffuseLighting.diffuseConstant =
<input id="diffuseConstant" type="number" step="0.1" value="1" min="0" oninput="onDiffuseConstantChange(arguments[0])" />
</div>
<br>
<div>
fePointLight.z =
<input id="fePointLightZ" type="number" step="1" value="10" oninput="onZChange(arguments[0])" />
</div>
<br>
<div>
feComposite.k1 =
<input id="K1" type="number" step=".1" value="5" oninput="onK1Change(arguments[0])" />
</div>
<div>
feComposite.k2 =
<input id="K2" type="number" step=".1" value="0.5" oninput="onK2Change(arguments[0])" />
</div>
<div>
feComposite.k3 =
<input id="K3" type="number" step=".1" value="0" oninput="onK3Change(arguments[0])" />
</div>
<div>
feComposite.k4 =
<input id="K4" type="number" step=".1" value="0" oninput="onK4Change(arguments[0])" />
</div>
<br>
<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg" onmousemove="onMouseMove(arguments[0])">
<!-- No light is applied -->
<text text-anchor="middle" x="100" y="20">No Light</text>
<circle id="myCircle" cx="100" cy="120" r="50" fill="green" />
<filter id="filterLight">
<feDiffuseLighting id="feDiffuseLighting" result="pointlight" lighting-color="white">
<fePointLight id="myPointLight" x="50" y="70" z="10" />
</feDiffuseLighting>
<feComposite id="feComposite" in="SourceGraphic" in2="pointlight" operator="arithmetic" k1="5" k2="0.5" k3="0" k4="0" />
</filter>
<g transform="translate(200)">
<text text-anchor="middle" x="100" y="20">fePointLight+feComposite</text>
<use href="#myCircle" filter="url(#filterLight)" />
</g>
<circle id="myPoint" cx="250" cy="70" r="5" fill="red" />
<line id="myLine" x1="250" y1="70" x2="300" y2="120" stroke="red" />
</svg>
/* body {
background-color: black;
color: white;
} */
function onColorChange(e) {
const feDiffuseLighting = document.getElementById("feDiffuseLighting");
feDiffuseLighting.setAttribute("lighting-color", e.target.value);
}
function onSurfaceScaleChange(e) {
const feDiffuseLighting = document.getElementById("feDiffuseLighting");
feDiffuseLighting.setAttribute("surfaceScale", e.target.value);
}
function onDiffuseConstantChange(e) {
const feDiffuseLighting = document.getElementById("feDiffuseLighting");
feDiffuseLighting.setAttribute("diffuseConstant", e.target.value);
}
function onZChange(e) {
const myPointLight = document.getElementById("myPointLight");
myPointLight.setAttribute("z", e.target.value);
}
function onK1Change(e) {
const feComposite = document.getElementById("feComposite");
feComposite.setAttribute("k1", e.target.value);
}
function onK2Change(e) {
const feComposite = document.getElementById("feComposite");
feComposite.setAttribute("k2", e.target.value);
}
function onK3Change(e) {
const feComposite = document.getElementById("feComposite");
feComposite.setAttribute("k3", e.target.value);
}
function onK4Change(e) {
const feComposite = document.getElementById("feComposite");
feComposite.setAttribute("k4", e.target.value);
}
function onMouseMove(e) {
console.log(e);
const myPoint = document.getElementById("myPoint");
myPoint.setAttribute("cx", e.offsetX);
myPoint.setAttribute("cy", e.offsetY);
const myLine = document.getElementById("myLine");
myLine.setAttribute("x1", e.offsetX);
myLine.setAttribute("y1", e.offsetY);
const myPointLight = document.getElementById("myPointLight");
// 因为 g.transform="translate(200)",所以这里需要减去 200
myPointLight.setAttribute("x", e.offsetX - 200);
myPointLight.setAttribute("y", e.offsetY);
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.