ラベル HTML の投稿を表示しています。 すべての投稿を表示
ラベル HTML の投稿を表示しています。 すべての投稿を表示

木曜日, 9月 11, 2025

Let's start JavaScript 82 
HTMLで複数の数値で作れる合計全表示

必要にせまられたので・・・
HTMLで複数の数値から作れる合計を重複を除きすべて表示させます。
例えば・・・
1,2,3の場合・・・ 1 2 3 1+3=4 2+3=5 1+2+3=6 となります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>合計組み合わせ</title>
<style>
body {
font-family: sans-serif;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
background: black;
color: white;
}
input {
width: 200px;
padding: 5px;
}
</style>
</head>
<body>
<h3>複数の数値から作れる合計をすべて表示</h3>
<p>数値を入力してください(半角, 区切り):</p>
<span>
<input type="text" size="28" id="inputNumbers"
        value="7,14,28,9,16,30">
&ensp;
<button onclick="showSums()">合計を表示</button></span>
<h4>合計一覧(重複なし)</h4>
<div id="results"></div>
<script>
function showSums() {
const input = document.getElementById('inputNumbers').value;
const numbers = input.split(',').map(n =>
        parseInt(n.trim(), 10)).filter(n => !isNaN(n));
const resultSet = new Set();

const n = numbers.length;
for (let i = 1; i < (1 << n); i++) {
let sum = 0;
for (let j = 0; j < n; j++) {
if (i & (1 << j)) {
sum += numbers[j];
}
}
resultSet.add(sum);
}

const sortedSums =
        Array.from(resultSet).sort((a, b) => a - b);
document.getElementById('results').innerHTML =
        sortedSums.join(', ');
}
</script>
</body>
</html>



実行直後の画面。



デフォルト値のまま[合計を表示]をクリックすれば、複数の入力数値から作れる合計を重複を除きすべて表示します。



入力値はボックスに入力できるまで入れることが出来ます。

木曜日, 8月 28, 2025

Let's start JavaScript 81 
HTML上でランダムな斜線を描画

HTML上でランダムな色と太さの斜線を描画します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
        content="width=device-width, initial-scale=1.0">
<title>ランダム斜め線描画</title>
<style>
body {
text-align: center;
font-family: Arial, sans-serif;
background-color: Black;
}
canvas {
border: 2px solid black;
margin-top: 10px;
background: white;
border: 1px solid white;
}
</style>
</head>
<body>

<h3>
    <font color="white">Random diagonal line drawing</font>
    </h3>
<label for="lineCount">線の本数:</label>
<input type="number" id="lineCount" value="10" min="1">
<button onclick="drawRandomLines()">描画</button>

<br>
<canvas id="canvas" width="500" height="500"></canvas>
<!-- canvas の width や height を変更すれば、
描画エリアを大きく or 小さくできます。 -->

<script>
function drawRandomLines() {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const numLines = parseInt(document.
                getElementById("lineCount").value, 10);

if (isNaN(numLines) || numLines < 1) {
alert("正しい本数を入力してください!");
return;
}

// キャンバスをクリア
// ctx.globalAlpha = 0.5; を追加すると、
            // 半透明の線を描画できます。
ctx.clearRect(0, 0, canvas.width, canvas.height);

for (let i = 0; i < numLines; i++) {
// ランダムな開始点と終了点
let x1 = randomRange(0, canvas.width);
let y1 = randomRange(0, canvas.height);
let x2 = randomRange(0, canvas.width);
let y2 = randomRange(0, canvas.height);

// ランダムな線の太さ
let lineWidth = randomRange(1, 15);
// randomRange(1, 15); の範囲を変更すると、
// 線の太さを太く or 細く 調整可能。

// ランダムなRGBカラー
let color = `rgb(${randomRange(0, 255)},
${randomRange(0, 255)}, ${randomRange(0, 255)})`;

// 線を描画
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.lineWidth = lineWidth;
ctx.strokeStyle = color;
ctx.stroke();
}
}

// min~maxの範囲でランダムな数を生成
function randomRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>
</body>
</html>

実行北後の画面です。数値(デフォルトは10)を入力して[描画]をクリックすれば・・・

枠内に表示されます。

100で実行した結果。

金曜日, 8月 22, 2025

VS CODEでHTMLプレビューを表示させる

質問がありましたので・・・
VS Codeならブラウザーを使うことなくVS Code上に表示かつサブモニターに配置することもできるので、その手順を整理しました。

まず、編集したいファイルを読み込みます。個々で拡張機能を開きます。

Windows版
[ファイル]>[ユーザー設定]>[拡張機能]

macOS版
[Code]>[基本設定]>[拡張機能]
または、
[表示]>[拡張機能]

拡張機能が表示されたら[Live Preview]を検索&インストールします。

インストールが完了したら・・・

画面右上の[Show Previeew]をクリックすれば・・・

プレビュー画面が表示されます。

通常のファイルと同様に切り離すことも出来るので、サブモニターに移動させることも出来ます。もちろん修正箇所はライブで反映されます。

月曜日, 8月 18, 2025

Let's start JavaScript 80 
HTMLで配置画像をクリックでランダム分割

配置画像をクリック毎にランダム分割で再配置させます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ランダム分割</title>
<style>
body {
margin: 0;
background: #111;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
position: relative;
display: inline-block;
}
img, canvas {
display: block;
width: 640px;
height: auto;
cursor: pointer;
}
canvas {
position: absolute;
top: 0;
left: 0;
display: none;
pointer-events: none; /* クリックはimgにのみ反応させる */
}
</style>
</head>
<body>

<div class="container">
<!-- 表示フォントを指定 -->
<img id="sourceImage" src="links/picture.jpg"
    alt="クリックして分割">
<canvas id="canvas"></canvas>
</div>

<script>
const img = document.getElementById('sourceImage');
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

// 読み込み後、キャンバスサイズを画像に合わせる
img.onload = () => {
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
};

// 画像クリック時、ランダム分割表示
img.addEventListener('click', () => {
const rows = Math.floor(Math.random() * 4) + 2; // 2~5行
const cols = Math.floor(Math.random() * 4) + 2; // 2~5列

const cellW = canvas.width / cols;
const cellH = canvas.height / rows;

ctx.clearRect(0, 0, canvas.width, canvas.height);

for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
const sx = Math.random() * (img.naturalWidth - cellW);
const sy = Math.random() * (img.naturalHeight - cellH);
const dx = c * cellW;
const dy = r * cellH;

ctx.drawImage(
img,
sx, sy, cellW, cellH,
dx, dy, cellW, cellH
);
}
}

// canvas 表示
canvas.style.display = 'block';
});
</script>

</body>
</html>


実行直後の画面

画像をクリック1回目

画像をクリック2回目

水曜日, 8月 06, 2025

Let's start JavaScript 79 
HTMLでアラビア数字を漢数字に変換

たま〜に必要なので、ダラダラ作っていました。
HTMLでアラビア数字を漢数字に変換します。


変換する漢数字は上の右端を基準としました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>漢数字変換</title>
<style>
body {
margin: 0;
padding: 0;
height: 100%;
font-family: serif;
background-color: black;
color: white;
}
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 50vh;
text-align: center;
}
input {
padding: 5px;
font-size: 18px;
margin: 5px;
}
button {
padding: 0px;
font-size: 16px;
margin: 5px;
width: 60px;
height: 30px;
}
#result {
margin-top: 20px;
font-size: 32px;
font-weight: bold;
color: white;
}
</style>
</head>
<body>
<div class="container">
<h3>アラビア数字を漢数字に変換<br>
        Convert Arabic Numerals to Kanji Numerals</h3>
<input type="number" id="inputNumber"
        placeholder="数値を入力">
<button onclick="convertToKanji()">変換</button>
<div id="result"></div>
</div>

<script>
function convertToKanji() {
const num =
        parseInt(document.getElementById('inputNumber').value, 10);
const resultDiv = document.getElementById('result');

if (isNaN(num)) {
resultDiv.textContent = '数値を入力してください。';
return;
}

resultDiv.textContent = numberToKanji(num);
}

function numberToKanji(num) {
const kanjiDigits = ['零', '壱', '弐', '参', '肆', '伍', '陸', '漆', '捌', '玖'];
const kanjiUnits = ['', '拾', '佰', '阡'];
const kanjiBigUnits = ['', '萬', '億', '兆'];

if (num === 0) return kanjiDigits[0];

let result = '';
const numStr = num.toString();
const chunks = [];

// 4桁ごとに右から区切る
let temp = numStr;
while (temp.length > 0) {
const chunk = temp.slice(-4);
chunks.unshift(chunk.padStart(4, '0'));
temp = temp.slice(0, -4);
}

chunks.forEach((chunk, i) => {
let part = '';
for (let j = 0; j < 4; j++) {
const digit = parseInt(chunk[j]);
if (digit !== 0) {
if (!(digit === 1 && j ===
                0 && chunk.length === 4 && i === 0 && j !== 3)) {
part += kanjiDigits[digit];
}
part += kanjiUnits[3 - j];
}
}
if (part !== '') {
result += part + kanjiBigUnits[chunks.length - 1 - i];
}
});

return result;
}
</script>
</body>
</html>



実行直後の画面。アラビア数字を入力して[変換]をクリックッすれば・・・


漢数字を表示します。
アラビア数字を漢数字に変換は、説明しないとワカランチンですね(^o^)汗

12345647890
12億3456万7890
十2億3千4百5十6万7千8百9十
一十二億三千四百五十六万七千八百九十
壱拾弐億参阡肆佰伍拾陸萬漆阡捌佰玖拾

木曜日, 7月 31, 2025

Let's start JavaScript 78 
解像度変更時のフォントサイズ確認

画像解像度を変更した時のフォントサイズ確認計算式を作成しました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>フォントサイズ計算</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 10px;
background-color: black;
color: white;
}
</style>
</head>
<body>
<h3>解像度変更時のフォントサイズを計算</h3>
<label>元のフォントサイズ(px):
<input type="number" id="originalSize" value="12">
</label><br>
<label>&emsp;&nbsp;元の画像解像度(DPI):
<input type="number" id="originalDpi" value="72">
</label><br>
<label>&emsp;&emsp;&nbsp;新しい解像度(DPI):
<input type="number" id="newDpi" value="350"></label>
<br><br>
<button onclick="calculateFontSize()">計算</button>
<h3 style="color: yellow">新しいフォントサイズ:
<span id="newFontSize">-</span> px</h3>

<script>
function calculateFontSize() {
let originalSize = parseFloat(document.
                getElementById("originalSize").value);
let originalDpi = parseFloat(document.
                getElementById("originalDpi").value);
let newDpi = parseFloat(document.
                getElementById("newDpi").value);

if (originalDpi > 0 && newDpi > 0) {
let newSize = originalSize / (newDpi / originalDpi);
document.getElementById("newFontSize").innerText =
newSize.toFixed(2);
} else {
alert("解像度は正の値を入力してください。");
}
}
</script>
</body>
</html>

実行直後の画面。必要な値を入力して[計算]をクリックッすれば・・・

新しい解像度を表示します。

月曜日, 7月 28, 2025

HTML_CSS_19 
HTMLとCSSの組み合わせ色々

HTMLとCSSの記述組み合わせ3パターンを簡易設定で整理してみました。

■一番簡単なHTMLだけの記述
作成するデータが1ファイルだけだったら、これもアリですが、CSSを知ってしまうとめんどうに感じマスね。

<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content=
"width=device-width, initial-scale=1.0">
</head>
<body bgcolor="midnightblue">
<table width="640" height="480" align="center">
<tr>
<td align="center" valign="middle" bgcolor="royalblue">
<H2><font color="white">
Clip art of graceful goldfish</font></H2>
<!-- 画像はindex.htmlと同じ階層にある
picフォルダー内の640×480pxサイズ -->
<img src="pic/picture.jpg" width="500" alt="金魚の画像">
</td>
</tr>
</table>
</body>
</html>
<!-- index.html -->

表示結果
実は640×480pxで指定したボックスが、なぜか636×476pxになっていました

■CSSを別途作成し手HTMLで読み込む
HTMLデータ作成の基本ですね。

/* rule.css */
@charset "UTF-8";
body {
text-align: center;
background-color: midnightblue;
}
.mainbox {
width: 640px;
height: 480px;
margin: 10px auto;
background-color: royalblue;
}
.f_sizu24 {
padding: 27px;
font-size: 24px;
font-weight: bold;
color: white;
}
/* rule.css */

<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content=
"width=device-width, initial-scale=1.0">
<!-- cssファイルを指定 -->
<link rel="stylesheet" type="text/css" href="rule.css">
</head>
<body>
<div class="mainbox">
<div class="f_sizu24">
Clip art of graceful goldfish
</div>
<!-- 画像はindex.htmlと同じ階層にある
picフォルダー内の640×480pxサイズ -->
<img src="pic/picture.jpg" width="500" alt="金魚の画像">
</div>
</body>
</html>
<!-- index.html -->


表示結果。「一番簡単なHTMLだけの記述」での表示とテキスト行間が若干異なります。

■HTML内にCSSを記述
作成するデータが1ファイルだけで、CSS記述が解れば、これもアリですね。

<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content=
"width=device-width, initial-scale=1.0">
<!-- <style>~</style>にcssを記述 -->
<style>
body {
text-align: center;
background-color: midnightblue;
}
.mainbox {
width: 640px;
height: 480px;
margin: 10px auto;
background-color: royalblue;
}
.f_sizu24 {
padding: 27px;
font-size: 24px;
font-weight: bold;
color: white;
}
</style>
</head>
<body>
<div class="mainbox">
<div class="f_sizu24">
Clip art of graceful goldfish
</div>
<!-- 画像はindex.htmlと同じ階層にある
picフォルダー内の640×480pxサイズ -->
<img src="pic/picture.jpg" width="500" alt="金魚の画像">
</div>
</body>
</html>
<!-- index.html -->
 
表示結果。「CSSを別途作成してHTMLで読み込む」と全く同じです。

月曜日, 7月 21, 2025

Let's start JavaScript 77 
指定色を16進数・補色・色相反転・彩度反転

前回の拡張版です。HTML上でOSのカラーパレットで指定した色と、その補色、色相反転、彩度反転を16進表示します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>色変換(補色・色相反転・彩度反転)</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 10px;
background-color: black;
color: white;
}
.color-box {
width: 400px;
height: 50px;
border: 1px solid #000;
display: inline-block;
vertical-align: middle;
margin-left: 0px;
}
</style>
</head>
<body>
<h3>色変換(補色・色相反転・彩度反転)</h3>
<input type="color" id="colorPicker" value="#ff0000">
<p>選択色: <span id="colorValue">
#ff0000</span>
<div id="colorPreview" class="color-box"
style="background-color: #ff0000;"></div>
</p>
<p>補 色: <span id="complementaryValue">
#00ffff</span>
<div id="complementaryPreview" class="color-box"
style="background-color: #00ffff;"></div>
</p>
<p>色相反転: <span id="hueInvertedValue">
#00ff00</span>
<div id="hueInvertedPreview" class="color-box"
style="background-color: #00ff00;"></div>
</p>
<p>彩度反転: <span id="saturationInvertedValue">
#808080</span>
<div id="saturationInvertedPreview" class="color-box"
style="background-color: #808080;"></div>
</p>

<script>
const colorPicker =
document.getElementById("colorPicker");
const colorValue =
document.getElementById("colorValue");
const colorPreview =
document.getElementById("colorPreview");
const complementaryValue =
document.getElementById("complementaryValue");
const complementaryPreview =
document.getElementById("complementaryPreview");
const hueInvertedValue =
document.getElementById("hueInvertedValue");
const hueInvertedPreview =
document.getElementById("hueInvertedPreview");
const saturationInvertedValue =
document.getElementById("saturationInvertedValue");
const saturationInvertedPreview =
document.getElementById("saturationInvertedPreview");

function hexToRGB(hex) {
return [
parseInt(hex.substring(1, 3), 16),
parseInt(hex.substring(3, 5), 16),
parseInt(hex.substring(5, 7), 16)
];
}

function rgbToHex(r, g, b) {
return `#${r.toString(16).padStart(2, "0")}${
g.toString(16).padStart(2, "0")}${
b.toString(16).padStart(2, "0")}`;
}

function getComplementaryColor(hex) {
let [r, g, b] = hexToRGB(hex);
return rgbToHex(255 - r, 255 - g, 255 - b);
}

function rgbToHSL(r, g, b) {
r /= 255, g /= 255, b /= 255;
let max = Math.max(r, g, b), min = Math.min(r, g, b);
let h, s, l = (max + min) / 2;

if (max === min) {
h = s = 0; // 無彩色
} else {
let d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h = Math.round(h * 60);
}
return [h, s, l];
}

function hslToRGB(h, s, l) {
let r, g, b;

function hueToRGB(p, q, t) {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1/6) return p + (q - p) * 6 * t;
if (t < 1/2) return q;
if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
return p;
}

if (s === 0) {
r = g = b = l; // 無彩色
} else {
let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
let p = 2 * l - q;
r = hueToRGB(p, q, (h + 180) / 360);
g = hueToRGB(p, q, h / 360);
b = hueToRGB(p, q, (h - 180) / 360);
}
return [Math.round(r * 255),
Math.round(g * 255), Math.round(b * 255)];
}

function getHueInvertedColor(hex) {
let [r, g, b] = hexToRGB(hex);
let [h, s, l] = rgbToHSL(r, g, b);
h = (h + 180) % 360; // 色相を180度反転
let [invR, invG, invB] = hslToRGB(h, s, l);
return rgbToHex(invR, invG, invB);
}

function getSaturationInvertedColor(hex) {
let [r, g, b] = hexToRGB(hex);
let [h, s, l] = rgbToHSL(r, g, b);
s = 1 - s; // 彩度反転
let [satR, satG, satB] = hslToRGB(h, s, l);
return rgbToHex(satR, satG, satB);
}

colorPicker.addEventListener("input", function() {
let selectedColor = colorPicker.value;
let complementaryColor =
getComplementaryColor(selectedColor);
let hueInvertedColor =
getHueInvertedColor(selectedColor);
let saturationInvertedColor =
getSaturationInvertedColor(selectedColor);

colorValue.textContent = selectedColor;
colorPreview.style.backgroundColor =
selectedColor;

complementaryValue.textContent =
complementaryColor;
complementaryPreview.style.backgroundColor =
complementaryColor;

hueInvertedValue.textContent =
hueInvertedColor;
hueInvertedPreview.style.backgroundColor =
hueInvertedColor;

saturationInvertedValue.textContent =
saturationInvertedColor;
saturationInvertedPreview.style.backgroundColor =
saturationInvertedColor;
});
</script>
</body>
</html>

実行直後の画面

カラーパレットで任意の色を選択すれば・・・

ライブでその色と補色、色相反転、彩度反転を表示します。