Beispiel:FeTurbulence-2.html

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="./Beispiel:Grundlayout.css">
  <title>Urfilter: feTurbulence - 2</title>  
<style>
figure {
	box-sizing: border-box;
	max-width: 60em;
	margin: auto;
}
svg {
  width: 96%;
  padding:0;
  margin:0;
  background: white;
}

form {
	width: 20em;
}

label {
	display: block;
	margin-top: 1em;
}

[type=range] {
	display: block;
	width: 100%;
	margin: 0;
}
body {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(20em, 1fr));	
	gap: 1em;
	}
h1 {grid-column: 1 / -1;}	
</style>
<script>
'use strict';

document.addEventListener('DOMContentLoaded', function () {
  // listen to all changes in the form
  document.querySelector('#control').addEventListener('input', changeSettings);
  changeSettings(); // initialize with default values
});

function changeSettings() {
  // select the turbulence filter element
  const filterElement = document.querySelector('#turbulence feTurbulence');
  
  // get input values
  const baseFrequencyX = parseFloat(document.querySelector('#baseFrequencyX').value);
  const baseFrequencyY = parseFloat(document.querySelector('#baseFrequencyY').value);
  const numOctaves= parseFloat(document.querySelector('#numOctaves').value);	
  const type = document.querySelector('input[name="type"]:checked').value;

  // set attributes on the filter
  filterElement.setAttribute('baseFrequency', `${baseFrequencyX} ${baseFrequencyY}`);
  filterElement.setAttribute('numOctaves', `${numOctaves}`);	
  filterElement.setAttribute('type', type);

  return false;
}

</script>

</head>
 
<body>
<h1>feTurbulence mit <code>numOctaves</h1>
<form id="control">
  <label for="baseFrequencyX">baseFrequencyX</label>
  <input id="baseFrequencyX" type="range" min="0" max="1" value=".01" step="0.01">

  <label for="baseFrequencyY">baseFrequencyY</label>
  <input id="baseFrequencyY" type="range" min="0" max="1" value=".01" step="0.01">
	<strong>Type:</strong> 
  <label>
    <input type="radio" name="type" value="turbulence" checked> turbulence
  </label>
  <label>
    <input type="radio" name="type" value="fractalNoise" > fractalNoise
  </label>
    <label for="numOctaves">numOctaves</label>
  <input id="numOctaves" type="range" min="1" max="10" value="1" step="1">
</form>   

<svg viewBox="0 0 520 360" >
<defs>
  <symbol id="wolke">
    <path stroke="blue" stroke-with="1" fill="skyblue"
	      d="m40,40 c0,0 20,-50 30,0 0,0 10,-40 40,0 0,0 40,-50 30,30 20,20 -0,30 -30,20 0,0 -20,50 -30,0 0,0 -30,50 -40,-20 0,0 -45,-30 0,-30" />
  </symbol>
  
<filter id="turbulence">
  <feTurbulence 
		id="turb" 
		type="turbulence"
		baseFrequency="0.02" 
		numOctaves="4"  
		result="turb" />
  <feDisplacementMap in="SourceGraphic" in2="turb" scale="50" />
</filter>
</defs>

	<image href="https://wiki.selfhtml.org/images/5/54/Landscape.svg" x="10" width="500" height="300" style="filter:url(#turbulence)" />
</svg>

</body>
</html>