Chrome Pointer

2023年12月5日 星期二

Vue教學1-透過vue.js用少少的語法,實現厲害特效

參考文章

💓為何會出現Refused to apply style from because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled

💓使用vue ,express, ejs 結合node.js,實作一個MVC架構簡易網頁


Vue教學

── Root Directory

    ├── test.html

    ├── index.css

    ├── index.js

    └── vue.js


此作品不需要server,可以直接開啟!

請參考裡面的語法,自己實做看看~


👉裡面index.js為javascript的語法,若有時間也可以試著把它改成vue的語法。

因為在vue裡面寫function時,也會用到一定程度的javascript,

所以建議javascript要先學好,再來學vue。


關注重點是:

v-model, v-if, v-else, v-on:click的寫法,



test.html

<html>
  <head>
    <title>Robert節點存取示範</title>
    <link href="index.css" rel="stylesheet">
    <script src="https://unpkg.com/vue@3.3.0/dist/vue.global.js"></script>
  </head>
  <body>
    <div id ="hi_text"><b>你好!text</b></div>
    <div id ="hi_html"><b>你好!html</b></div>
    <input type="button" value="hi.innerText" id="innerText"/>
    <input type="button" value="hi.innerHTML" id="innerHTML"/>

    <a href="http://www.w3cschool.cc">w3cschool.cc</a>
    <a href="http://www.disney.com" cuteQ="">disney.com</a>
    <a href="http://www.wikipedia.org" cuteQ="">wikipedia.org</a>
    <button class="click_btn" >點我</button>

    <ul id="box">
      <li class="a">上天保佑我</li>
    </ul>

    <div class="main">
      <p>hello!</p>
      <p id="cha">change!</p>
    </div>

    <input type="text" class="txt" value="你好嗎?">
    <select class="list">
      <option value="高雄市">高雄市</option>
      <option value="台北市">台北市</option>
    </select>
    <button class="go">GO</button>
   
    <div id="app">
      <p>input 元素:
      <input v-model="message" placeholder="上蒼保佑,编辑我……">
      &emsp;input 表单消息是: {{ message }}
      </p>
     
      <p style="white-space: pre">textarea 元素:
      <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
      &emsp;textarea 表单消息是:<br>{{ message2 }}
      </p>
    </div>
   
    <div id="app2">
      <p>单个复选框:
      <input type="checkbox" value="QQQQQ" v-model="checked">
      <label>{{ checked }} + {{ checked_name }}+ {{ lotus_i }}</label></p>
      <button class="click_lotus" v-on:click="checked_nameClick(), add_lotus_i()">click</button>&emsp;
      <span v-if="lotus_i%2===0">餘數為0</span>
      <span v-else>餘數為1</span>
 
      <p>多个复选框:
      <input type="checkbox"  value="Runoob" v-model="checkedNames">
      <label>Runoob</label>
      <input type="checkbox" value="Google" v-model="checkedNames">
      <label>Google</label>
      <input type="checkbox" value="Taobao" v-model="checkedNames">
      <label>taobao</label>
      <br>
      <span>选择的值为: {{ checkedNames }}</span></p>
    </div>

    <script src="index.js"></script>
    <script src="vue.js"></script>
  </body>
</html>

vue.js

const app = {
    data() {
        return {
            message: '',
            message2: '上天保佑,事事順心\nhttps://www.GodBlissMe.com'
        }
    }
}
Vue.createApp(app).mount('#app')

const app2 = {
    data() {
      return {
        checked : true,
        checkedNames: [],
        checked_name: "A蓮花",
        lotus_i: 0
      }
    },
    methods: {
        checked_nameClick () {
            if (this.lotus_i%2===0){
                this.checked_name="B蓮花";
            }
            else{
                this.checked_name="A蓮花";
            }
        },
        add_lotus_i () {
            this.lotus_i++;
        }
      }
  }
Vue.createApp(app2).mount('#app2')

index.css

a[cuteQ] {
    background-color: lightcoral;
}
button {
    background-color: rgb(76, 69, 138); /* Green */
    border: none;
    color: white;
    padding: 10px 32px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 16px;
}

.click_btn {
    background-color: #458a47; /* Green */
    border: none;
    color: white;
    padding: 10px 32px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 16px;
}
.click_lotus {
    background-color: #411111; /* Green */
    border: 1px;
    color: white;
    padding: 10px 30px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 16px;
}

input[type=text] {
    width: 100%;
    padding: 12px 20px;
    margin: 8px 0;
    box-sizing: border-box;
    color: rgb(65, 3, 3);
  }

li {
    font-size: 20px;
    color: rgb(65, 3, 3);
}


index.js

const main = document.querySelectorAll('.main p');
main[0].innerHTML = `<h1 class="header"> qqq</h1>`;
main[1].innerHTML = `<h1 class="header"> 標題 </h1>`;

let click_innerHTML = document.getElementById("innerHTML")
click_innerHTML.addEventListener("click",function(){
  alert(document.getElementById('hi_text').innerHTML)
})

let click_innerText = document.getElementById("innerText")
click_innerText.addEventListener("click",function(){
  alert(document.getElementById('hi_html').innerText)
})

let cc = 0
let click_btn = document.querySelector('.click_btn');
click_btn.addEventListener("click",function(){
  myFunction(cc++);
 
});

let go_btn = document.querySelector('.go');
go_btn.addEventListener("click",function(){
  show();
});

const txt = document.querySelector('.txt');
main[0].innerHTML = txt.getAttribute("value")

const list = document.querySelector('.list');
list.value = "台北市";

function myFunction(cc) {
  let ul = document.querySelector('ul');

  let node=document.createElement("li");
  let textnode=document.createTextNode("God bliss me");
  node.appendChild(textnode);
  ul.appendChild(node);

  let x = document.querySelectorAll("a[cuteQ]");
  let i = 0;
  if (cc%2===1){
    for (i = 0; i < x.length; i++) {
      x[i].style.backgroundColor = "yellow";
      textnode=document.createTextNode(cc);
      x[i].appendChild(textnode)
      if (i===0){
        button = document.createElement("button")
        button.textContent ="yoyo"
        button.classList.add("yoclass"+cc);
        node=document.createElement("li");
        textnode=document.createTextNode("第"+cc+"個,愛你");
        node.appendChild(textnode);
        node.appendChild(button)
        ul.appendChild(node);
      }
      //要留意的是 如果 appendChild 使用時,append 上去的是一個已存在的 node 時,它會做的是"搬移",而非複製。
      //https://pjchender.dev/webapis/webapis-node-element-and-append-child/
    }
    let bb = 0
    let bbb_btn = document.querySelector(".yoclass"+cc)
    bbb_btn.addEventListener("click", function () {
      if (bb%2===0){
        //alert("up"+cc)
        bbb_btn.textContent= "up"+cc
        bbb_btn.style.backgroundColor="purple"
        console.log("upbb:",bb)
      }else{
        //alert("down"+cc)
        bbb_btn.textContent= "down"+cc
        bbb_btn.style.backgroundColor="black"
        console.log("downbb:",bb)
      }
        bb++
    });
  }else{
    for (i = 0; i < x.length; i++) {
      x[i].style.backgroundColor = "lightgreen";
      textnode=document.createTextNode(cc);
      x[i].appendChild(textnode)
      if (i===0){
        node=document.createElement("li");
        textnode=document.createTextNode("第"+cc+"個,愛你");
        node.appendChild(textnode);
        ul.appendChild(node);
      }
      //要留意的是 如果 appendChild 使用時,append 上去的是一個已存在的 node 時,它會做的是"搬移",而非複製。
      //https://pjchender.dev/webapis/webapis-node-element-and-append-child/
    }
  }
  }
 

function show(){
  main[0].innerHTML = txt.value;
  let ul = document.querySelector('ul');
  let node=document.createElement("li");
  let textnode=document.createTextNode(txt.value+" + "+list.value);
  node.appendChild(textnode);
  ul.appendChild(node);
}



沒有留言:

張貼留言

喜歡我的文章嗎? 喜歡的話可以留言回應我喔! ^^