HTML, CSS och Javascript: Skillnad mellan sidversioner

Från Wikiskola
Hoppa till navigering Hoppa till sök
 
(23 mellanliggande sidversioner av samma användare visas inte)
Rad 135: Rad 135:
[[Fil:Skärmavbild 2016-11-10 kl. 22.16.37.png|200px|right]]
[[Fil:Skärmavbild 2016-11-10 kl. 22.16.37.png|200px|right]]


Rita ett hus eller en fin bild med hjälp av den html du lärt dig på W3Schools.
Rita ett hus eller en fin bild med hjälp av den html och Javascript du lärt dig på W3Schools.


Du kombinerar alltså linjer, rektanglar, cirklar, färger, gradienter och text till en trevlig bild.
Du kombinerar alltså linjer, rektanglar, cirklar, färger, gradienter och text till en trevlig bild.


Sedan tar du en skärmdump på bilden och sparar för säkerhets skul.,
Sedan tar du en skärmdump på bilden och sparar för säkerhets skull.
 
Spara även koden i en .html-fil. Du kommer att kunna visa detta på din egen personliga hemsida lite senare i kursen.


Du ska lämna in koden.Kopiera koden till Anteckningar och spara den  med ändelsen .html. Den lämnar du in på Canvas - Teknik 1.
}}
}}


Rad 184: Rad 185:
Skapa en egen funktion som räknar ut något på samma sätt.
Skapa en egen funktion som räknar ut något på samma sätt.


=== Lägg in funktioner i Husbilden ===
Du kan använda funktioner för att förenkla koden i din husbild. Du kan arbeta på detta sätt när du skapar nya bilder, exempelvis en figur (gubbe) till ett kommande spel.


{{uppgruta | '''Funktioner förenklar - skapa en gubbe'''
{{uppgruta | '''Funktioner förenklar - skapa en gubbe'''
Rad 221: Rad 225:
this.myRectangle(50, 20, 50, 70, "Green");
this.myRectangle(50, 20, 50, 70, "Green");
this.myRectangle(90, 200, 50, 70, "Red");
this.myRectangle(90, 200, 50, 70, "Red");
</script>
</body>
</html>
</pre>
}}
=== Använd variabler till funktionerna ===
I exemplet nedan har vi lagt till variabler för att styra var de röda rektanglarna hamnar.
{{Lista | Variabler och funktioner
<pre>
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500"
style="border:1px solid #d3d3d3;">
Your browser does not support the canvas element.
</canvas>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var startX = 40;
var startY = 40;
var distX = 80;
var distY = 110;
var bredd = 50;
function myRectangle(x, y, w, l, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, w, l);
}
this.myRectangle(startX, startY, bredd, 70, "Red");
this.myRectangle(startX + distX, startY, bredd, 70, "Red");
this.myRectangle(startX + 2*distX, startY, bredd, 70, "Red");
this.myRectangle(startX, startY + distY, bredd, 70, "Red");
this.myRectangle(startX + distX, startY + distY, bredd, 70, "Red");
this.myRectangle(startX + 2*distX, startY + distY, bredd, 70, "Red");
</script>
</script>


Rad 980: Rad 1 027:
{{clear}}
{{clear}}


== Gör ett ritprogram ==
== Andra plattformar för spelutveckling (med Javascript) ==
 
[[Fil:Ritprogram1.PNG|400px|höger]]
 
Med följande kod kan du rita på canvas med muspekaren. Det gör att du kan bygga ett Paintliknade program. Nedan finns ett exempel men det kommer fler. Koden behöver städas lite också :-)
 
{{Lista |
<pre>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
body {
    margin: 0;
}
canvas {
    border:1px solid #d3d3d3;
    background-color: #f1f1f1;
}
</style>
</head>
<body onload="startGame()">
<script>
var myGamePiece;
var myUpBtn;
var myDownBtn;
var myLeftBtn;
var myRightBtn;
 
function startGame() {
    myGamePiece = new component(30, 30, "red", 10, 120);
    myUpBtn = new component(30, 30, "blue", 50, 10);   
    myDownBtn = new component(30, 30, "blue", 50, 70);   
    myLeftBtn = new component(30, 30, "blue", 20, 40);   
    myRightBtn = new component(30, 30, "blue", 80, 40);               
    myGameArea.start();
}
 
 
var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('mousedown', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('mouseup', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
        window.addEventListener('touchstart', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('touchend', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}
 
function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    this.x = x;
    this.y = y;   
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
      ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.clicked = function() {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var clicked = true;
        if ((mybottom < myGameArea.y) || (mytop > myGameArea.y) || (myright < myGameArea.x) || (myleft > myGameArea.x)) {
            clicked = false;
        }
        return clicked;
    }
}


function updateGameArea() {
* [http://phaser.io Phaser]
//   myGameArea.clear();
* [http://processingjs.org/ Processing]
    if (myGameArea.x) {
        myGamePiece = new component(30, 30, "green", myGameArea.x, myGameArea.y);
   
        if (myUpBtn.clicked()) {
        //    myGamePiece.y -= 1;
        }
        if (myDownBtn.clicked()) {
        //    myGamePiece.y += 1;
        }
        if (myLeftBtn.clicked()) {
        //   myGamePiece.x += -1;
        }
        if (myRightBtn.clicked()) {
        //    myGamePiece.x += 1;
        }
    }
    myUpBtn.update();       
    myDownBtn.update();       
    myLeftBtn.update();       
    myRightBtn.update();                               
    myGamePiece.update();
}


</script>
= Ritprogrammet =


<p>Click on the blue "buttons" to make the red square move.</p>
Du behöver skapa två filer:
</body>
*index.html
</html>
* main.js
</pre>}}


{{clear}}
Använd Anteckningar och spara dem i en egen mapp.


=== Enkel kod för ritprogram på spelprogrammering.nu ===
== Kod för ritprogrammet ==


Den här koden går inte att köra på w3school men den funkar fint på spelprogrammering.nu i deras [http://koda.nu/labbet/ Kodlabbet].
Programmet nedan är ett halvfärdigt ritprogram. Din uppgift är att förbättra det. Du använder kanske anteckningar eller så har du en redigerare som exempelvis Atom. Börja med att skapa två filer; en index.html och en main.js. Koden hittar du nedan.


Det här är en bra '''komplettering''' om du inte har lyckats så bra med uppgifterna ovan.
Testkör programmet och se vad det kan. Du klickar för att rita. Undersök koden för att hitta vilka delar av programmet som gör vad. Du behöver inte förstå hur all kod fungerar.


==== Kod för spelprogrammering.nu ====
Programmet kan byta färg när man trycker en tangent och det går att ändra radien. Dessutom finns en mouse over-funktion.


{{uppgruta | '''Ritprogrammet'''
{{uppgruta | '''Ritprogrammet'''
Rad 1 123: Rad 1 054:


Det innebär att du lägger in fler färger, förklarande bokstäver och mousover-funktioner. Du kommer att kopiera från den befintliga koden och ändra vissa parametrar. När du gör detta kommer du att lära dig mer programmering. Lägg in en text som förklarar viilka funktioner ditt ritprogram har.
Det innebär att du lägger in fler färger, förklarande bokstäver och mousover-funktioner. Du kommer att kopiera från den befintliga koden och ändra vissa parametrar. När du gör detta kommer du att lära dig mer programmering. Lägg in en text som förklarar viilka funktioner ditt ritprogram har.
Spara koden som en fil av typen .html.
}}
}}


Observera att denna kod inte fungerar riktigt i Safari. Använd '''Chrome'''.
=== html-koden ===


{{Lista |
{{Lista | index.html
<pre>
<pre>
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
<head>
<head>
<title>Page Title</title>
<meta charset="utf-8">
<title>CLICK and DRAW</title>
<style>
  body {
  overflow: hidden;
  background-color: lightgrey
  }
</style>
</head>
</head>
<body>
<body>
<canvas>Please update your browser</canvas>
<script src="main.js"></script>
</body>
</html>
</pre>
}}


<canvas id="myCanvas" width="400" height="500"
=== Javascriptet ===
style="border:1px solid #d3d3d3;">
 
Your browser does not support the canvas element.
{{Lista | main.js
</canvas>
<pre>
// Thanks to Jagadesha NH:
// https://medium.com/@jagadeshanh/html5-canvas-click-and-draw-f665e02f5744


<script src="http://spelprogrammering.nu/simple.js">
var canvas = document.getElementsByTagName("canvas")[0];
var context = canvas.getContext("2d");
var height = canvas.height = window.innerHeight;
var width = canvas.width = window.innerWidth;
var mouseClicked = false, mouseReleased = true;
var  x0 = 50;
  y0 = 30;
  bredd =40;
  hojd = 40;
  distance = 40;
  color = "green";
  radie = 10;
  size = 22;


var canvas = document.getElementById("myCanvas");
document.addEventListener("click", onMouseClick, false);
var ctx = canvas.getContext("2d");
document.addEventListener("mousemove", onMouseMove, false);
function onMouseClick(e) {
    mouseClicked = !mouseClicked;
}
function onMouseMove(e) {
    if (mouseClicked) {
        context.beginPath();
        context.arc(e.clientX, e.clientY, radie, 0, Math.PI * 2, false);
        context.lineWidth = 5;
        context.strokeStyle = color;
        context.stroke();
    }
//en mouse over-funktion
if ((e.clientX > x0) && (e.clientX < x0 + bredd) && (e.clientY > y0)
      && (e.clientY < y0 + hojd))  { color = "green"; }
}


  var  x0 = 50;
// Här börjar koden inspirerad av spelprogrammering.nu
    y0 = 30;
    bredd =40;
    hojd = 40;
    distance = 40;
    color = "green";
    radie = 10;
size = 22;


function myRectangle(x, y, w, l, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, w, l);
}


function myCircle(x, y, r, t, color) {
function myRectangle(x, y, w, l, color)
ctx.beginPath();
{
ctx.arc(x,y,r,t, 2.2*Math.PI);
  context.fillStyle = color
ctx.fillStyle = color;
  context.fillRect(x, y, w, l);
ctx.fill();
}
}


function myText(x, y, size, text, color)
function myText(x, y, size, text, color)
{
{
   ctx.font = size + "pt Helvetica";
   context.font = size + "pt Helvetica";
   ctx.fillStyle = color;
   context.fillStyle = color;
   ctx.fillText(text, x, y);
   context.fillText(text, x, y);
}
}


  function update()
// rita de f?rgade rutorna
 
   this.myRectangle(x0, y0, bredd, hojd, "green");
{
  // rita de färgade rutorna
   this.myRectangle(x0, y0, bredd, hojd, "green");  
   this.myRectangle(x0, y0 + distance, bredd, hojd, "blue");
   this.myRectangle(x0, y0 + distance, bredd, hojd, "blue");
   this.myText(x0-30, y0 + distance+25, 18, "b", "blue");
   this.myText(x0-30, y0 + distance+25, 18, "b", "blue");
   this.myRectangle(x0, y0 + 2 * distance, bredd, hojd, "yellow");
   this.myRectangle(x0, y0 + 2 * distance, bredd, hojd, "yellow");
   this.myRectangle(x0, y0 + 3 * distance, bredd, hojd, "pink");
   this.myRectangle(x0, y0 + 3 * distance, bredd, hojd, "pink");
 
  // rita med vald färg
  if(mouse.left)
  {
    this.myCircle(mouse.x, mouse.y, radie, 2,color);
  }
  // sudda med vit färg genom högerklick


  if(mouse.right)
// v?lj f?rg att rita med
  {
window.addEventListener('keydown',this.check,false);
    this.myCircle(mouse.x, mouse.y, radie, 2,"white");
 
  }
// function check(e) {
  // välj färg att rita med
//    alert(e.keyCode);
     if ((mouse.x > x0) && (mouse.x < x0 + bredd) && (mouse.y > y0)  
//}
         && (mouse.y < y0 + hojd))  { color = "green"; }
 
     if (keyboard.g) { color = "yellow"; }
function check(e) {
     if (keyboard.b) { color = "blue"; }
    var code = e.keyCode
 
// Ändra färg
  // Välj radie på cikeln du ritar med
     if (code == 71)
    if (keyboard.one) { radie = 2; }
        color = "green";
    if (keyboard.two) { radie = 4; }
    if (code == 66)
     if (keyboard.three)  { radie = 8; }
         color = "blue";
     if (code == 89)
        color = "yellow";
     if (code == 80)
        color = "pink";
// Ändra radie
if (code == 49)
    radie = 5;
if (code == 50)
     radie = 10;
}
}
</script>
</body>
</html>
</pre>
</pre>
}}
}}


===== Exempel =====
=== Exempel ===
 
[http://liam.hodi.se/ Liam i TE16A gjorde detta ritprogram]. Det är mycket bra och förstås A.


: Ett [https://19huhe.ssis.nu/ritprogram/ ritprogram] av Hugo Helm
: Ett [https://19thli.ssis.nu/wp-content/uploads/2019/09/index.html ritprogram] av Theresia Lindahl.
<headertabs />
<headertabs />

Nuvarande version från 21 november 2019 kl. 22.07

[redigera]
Mål för undervisningen

Vi kommer att arbeta med Ci 1, dvs det centrala innehållet1:

Teknikutvecklingsprocessens alla delar från idé och modell, produkt eller tjänst till användning och återvinning med praktisk tillämpning av teknik och teknikutveckling inom ett eller flera teknikområden.

Ni kommer att kunna visa förmåga:

3. Förmåga att lösa tekniska problem.
6. Kunskaper om hur teknik har utvecklats och utvecklas i samspel med det omgivande samhället samt kunskaper om befintlig teknik och aktuell teknikutveckling.


Som intro kan man titta på några olika exempelsidor med enkel kodning samt några platser där man kan lära sig koda. Utforska gärna detta på egen hand.

Intro till Turtle Logo programmering
Scratch
Lär dig programmera genom att spela spel
Codecademy
Teori - programmering med en presentation.

Editors

Det finns en editor att ladda ner som heter TextWrangler och den fungerar bra men länkarna nedan går till moderna editorer. Testa dig fram så du hittar vad som passar dig bäst.

TryIt Editor klicka på den gröna Try it-knappen.
Atom är ett bra verktyg för att koda med färg.
TextWrangler Traditinellt verktyg för textredigering. (Mac)
Brackets
CodePen