主頁 > 區塊鏈 > 四天學會JavaScript~Day4

四天學會JavaScript~Day4

2020-10-06 16:54:44 區塊鏈

四天學會JavaScript~Day4

昨天學習的內容

前言

今天是國慶假期的第五天了,同時也是我學習JavaScript的第四天,經過了前面三天的學習,基本的概念也都過了一遍,是時候該做專案了,其實我之所以會選擇國慶期間學前端,是因為我打算國慶之后開始來做一個電商專案,這個電商專案會很大,我應該是會采用分布式,主要目的不是為了上線也不是為了賺錢,而是單單純純的想全堆疊的做一次,提高技術水平,所以我必須先把前端學好,今天的學習打算呢,我是計劃先用最原始的HTML,CSS,JavaScript來做一個頁面好看點的專案,當然實際功能可能還是和昨天的購物車差不多,接著呢,我今天還要學習bootstrap和vue兩大前端框架,不過我更多的還是會學習bootstrap,因為我是計劃在我的專案中去使用它,

第四天的學習內容

單鏈表的翻轉(面向物件語法復習)
CSS樣式
購物車(圖形版)
bootstrap框架
Vue框架
登錄框(bootstrap實作)

單鏈表的翻轉

前天呢,學習第二天的時候我說過為了鞏固面向物件的語法,所以是決定每天寫一遍資料結構的,不過從明天開始就正式進入專案階段了也就沒必要寫了,今天就寫個單鏈表的翻轉,然后寫下購物車,當然這次的購物車要比昨天的購物車多了一些圖片素材,主要目的還是為了鞏固,

我們都知道堆疊資料結構是先進后出的,所以其實你要翻轉單鏈表特別簡單,只需要把資料放到堆疊里面再吐出來就可以了~沒什么難度,但是呢,我前天寫單鏈表的那種寫法遍歷出來和添加的順序都是反的,所以應對這種情況使用堆疊反而無法翻轉,因為翻轉后的資料再經歷一次翻轉就又相當于是還原了,所以這種情況下如果我要達到翻轉效果,可以使用佇列,佇列是先進先出的,把本來就已經翻轉的資料重新插入再遍歷可以達到效果,

在這里我要宣告一下,正常情況下都是使用堆疊來達到翻轉效果,但是我這種情況使用佇列會更好一些,

關于堆疊和鏈表的資料結構理論的話我過去也寫過博客,這里就列出來分享一下,

堆疊和佇列的基本概念
順序堆疊和鏈表堆疊
順序佇列和鏈表佇列

代碼實作

			/**
			 * 鏈表類
			 */
			function LinkList(){
				//結點類
				function Node(data){
					this.data = data;
					this.next = null;
				}
				//頭節點
				var head = new Node(null);
				//插入元素
				this.add = function(data){
					var temp = new Node(data);
					temp.next = head.next;
					head.next = temp;
				};
				//遍歷元素
				this.print = function(){
					var temp = head.next;
					while(temp != null){
						document.write(temp.data + " ");
						temp = temp.next;
					}
				};
				//翻轉
				this.rev = function(){
					var temp = head.next;
					//定義一個佇列
					var queue = new Array();
					//把鏈表元素存入佇列內
					while(temp != null){
						queue.push(temp.data);
						temp = temp.next;
					}
					//將 head 置空 然后重新添加
					head = new Node(null);
					//把佇列的結點吐出來
					while(queue.length > 0){
					//剛剛push是從后往前添加,所以現在shift是
					//從前往后吐出來,因此達到先進先出的效果
						this.add(queue.shift());
					}
				};
			}
			//main 函式
			function main(){
				var list = new LinkList();
				//添加元素
				for(var i = 0; i < 10; i++){
					list.add(i);
				}
				//列印原鏈表
				list.print();
				document.write("<br/>");
				//翻轉鏈表
				list.rev();
				//列印翻轉后的
				list.print();
			}
			main();
翻轉

在這里插入圖片描述

購物車

剛才把鏈表翻轉了一下,主要目的不是鍛煉資料結構,而是鞏固JavaScript編程語法,如果要學習資料結構,個人是建議使用C語言或者C++語言來實作會更好一些,因為C/C++語言比較接近底層,特別是C語言,

購物車呢,昨天使用jQuery已經實作過一遍了,那么今天我就打算使用JavaScript來實作一遍,當然,這一次我會盡量把網頁做的好看一點,當然實際的功能和昨天還是差不多,更多的還是為了鞏固,做完購物車之后就要開始學習bootstrap和vue了,

購物車的頁面

這個購物車的頁面我是對京東購物車的一個模仿,當然我也只是拿來學習用的,并不是拿去商業用途,還望別介意哈,

在這里插入圖片描述

這個頁面呢是使用純HTML+CSS畫的,然后JavaScript是用來干什么的呢?需求如下:

功能需求:

1: 全選功能:而且點擊復選框也會自動勾選全選框,不能有BUG

2: 計算功能:通過商品數量的增加旁邊的價格也跟著增加

3: 洗掉功能:洗掉購物車中的商品

4: 結算功能:算出最后應該付款的價格

這個專案在JavaScript上的需求比昨天的都要簡單,主要練習的方向是HTML和CSS,因為等下學框架的時候,比如說bootstrap框架它都是把這些底層封裝好的,所以在學習框架之前先趕緊用一遍底層,

如果想到了一個需求的解決方法,但是又不知道用什么標簽或者屬性,那么《菜鳥教程》或者《w3school》這兩個網站可以幫助自己,也可以在額外創建一個專門做實驗的html檔案,可以臨時試試它的效果如何,

還有一件事就是,不管是HTML、CSS還是JavaScript,又或者其他語言,比如說Java,Python等,永遠都不要花心思去記那些工具,方法什么的,只要知道有這個東西,然后它底層是怎么一回事就好了,知道原理寫代碼的時候看API能夠看得懂就好了,因為人不可能全都記得住,有這個時間,還不如多去鉆研一些邏輯思維,或者資料結構與演算法,RBAC,設計模式什么的,當然學習底層個人覺得比較好的方法可以先學點C/C++語言,因為C語言是底層,就比如說垃圾回識訓制,如果學過C語言的人他就能很快聽得懂,學過C++就知道解構式這種東西,個人觀點,不喜勿噴,當然如果有大神的話,請求指點,因為本人是個菜鳥,哈哈^ ^,

在這里呢,使用兩個檔案來寫,一個檔案專門寫CSS,另一個則是HTML+JavaScript,檔案名字我也懶得取了,直接new_file省事,

代碼實作

CSS全域設定

這些都是比較常用的格式,主要是為了美觀,我自己也是在網上搜索的,甚至說接下來的頁面,我也會邊看手冊邊寫,就像看字典一樣,因為我實話實說我真的沒法記住它們,但是看手冊的話,還是可以拼出來的,

/*清除所有格式*/
body,div,h1,h2,h3,h4,h5,h6,li,ol,ul{margin: 0px; padding: 0px;}
/*整個文本默認居中*/
body{text-align: center;font-size:14px;}
/*所有a標簽去掉下劃線*/
a{text-decoration: none;}
/*li的點去掉*/
li{list-style: none;}
如何使用CSS定位HTML標簽的位置來設定格式?
<!--	  這里先寫好class,等下到了CSS檔案里,就可以根據這個class
				  找到該標簽的位置,然后設定格式
				-->
		<div class="nav">
			
		</div>
/*這里面的navigation,是根據前臺html標簽里面的class找到的*/
		.nav{
			height: 30px;
			/*#f1f1f1是顏色,具體的對應可以查百度*/
			background-color: #f1f1f1;
		}

基本的事項剛剛也說完了,現在直接放代碼了,由于HTML和CSS代碼比較多,而且也都是拼出來的沒什么邏輯性,所以CSS就不放筆記里來了,HTML我也刪減一部分,只保留系結了事件的標簽,筆記盡量記一些有邏輯性的東西,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>購物車</title>
			
		<link rel="stylesheet" type="text/css" href="css/shop.css"/>
		<script type="text/javascript">
			//獲得所有多選框的物件
			var all = document.getElementsByName("select");
			/**
			 * 全選操作,點擊這個按鈕其他的都會自動全選
			 * 但是這里不能使單選來決定是否全選
			 * 我們還需要另一個函式
			 * @param {Object} obj
			 */
			function isSelectAll(obj){
				var flag = obj.checked;
				for(i in all){
					all[i].checked = flag; 
				}
			}
			/**
			 * 單選框決定全選框
			 * @param {Object} obj
			 */
			function isSelectAllPlus(obj){
				//默認全選
				var flag = true;
				/**
				 * 之所以這樣回圈,是因為第一個和最后一個按鈕都不是商品的按鈕
				 * 而是全選的按鈕,所以這里就避過了第一個和最后一個兩個按鈕
				 */
				for(var i = 1; i < all.length - 1; i++){
					//如果有一個沒選那就不是全選
					if(!all[i].checked){
						flag = false;
						//也沒必要繼續回圈判斷了
						break;
					}
				}
				//改變第一個和最后一個框
				all[0].checked = flag;
				all[all.length - 1].checked = flag;
			}
			/**
			 * 控制增加減少
			 * @param {Object} obj
			 * @param {Object} sigle
			 */
			function checkAdd(obj,sigle){
				var pre;
				if(sigle == "1"){
					//獲得下一個結點
					pre = obj.nextElementSibling;
					//如果數量大于0
					if(Number(pre.value) > 0){
						//獲得節點的value值
						pre.value=Number(pre.value)-1;
					}
				}else{
					//獲得上一個結點物件
					pre = obj.previousElementSibling;
					//獲得結點value的值
					pre.value = Number(pre.value) + 1;
				}
				//計算每一個商品的價格
				//獲得每一個商品的單價
				var val=pre.parentNode.previousElementSibling.innerHTML;
				//計算總的價格
				var num =Number(val)*Number(pre.value);
				//把總的價格賦值給指定的物件
				pre.parentNode.nextElementSibling.innerHTML="¥"+num;	
			}
			/**
			 * 洗掉結點
			 */
			function deleteByThis(obj){
				//獲得父節點的div	這么多parent的原因昨天體驗過
				var divNode = obj.parentNode.parentNode.parentNode;
				divNode.remove();
			}
			/**
			 * 結算最后的價格
			 */
			function countMoney(){
				//統計商品的總價格
				var count = 0;
				//統計是否有勾選的物件
				var checkedNum = 0;
				//統計商品的數量
				var number = 0;
				//回圈遍歷
				for(var i = 0; i <all.length; i++){
					//如果選中才會進入計算
					if(all[i].checked){
						//商品的數量
						checkedNum++;
						//獲得ul父結點
						var par = all[i].parentNode.parentNode;
						//獲得指定ul下面的所有的li
						var li= par.getElementsByTagName("li");
						//單個商品的總價格
						var money=li[6].innerText.split("¥")[1];
						//獲得所有商品的總價格
						count += Number(money);
						document.getElementById("countMoney").innerText=count;
						//獲得商品的數量
						var shopCount=li[5].getElementsByTagName("input");
						var  num=shopCount[0].value;
						number+=Number(num);
						//獲得商品數量統計的物件
						document.getElementById("snum").innerText=number;
					}
				}
				//如果沒有勾選自然就都是0
				if(checkedNum==0){
					document.getElementById("countMoney").innerText=0;
					document.getElementById("snum").innerText=0;
				}
			}
		</script>
		
	</head>
	<body>
		<!--顯示選單的結束-->
		
		<!--商品詳情展示開始-->
		  <div class="info warp">
		  	
		  	  <ul>
		  	  	<li class="info_1"><input type="checkbox"   name="select" onclick="isSelectAllPlus(),countMoney()"/> </li>
		  	  	<li class="info_2"> <img src="img/img1.jpg" width="80px"/> </li>
		  	  	<li class="info_3"><a>刀鋒之影</a></li>
		  	  	<li class="info_4"><a>經典皮膚</a> </li>
		  	  	<li class="info_5">6300</li>
		  	  	<li class="info_6">
		  	  		<button onclick="checkAdd(this,1),isSelectAllPlus(),countMoney()">-</button>
		  	  		<input type="text" name="" id="" value="1" />
		  	  		<button class="bot" onclick="checkAdd(this,2),isSelectAllPlus(),countMoney()">+</button>
		  	  		
		  	  	</li>
		  	  	<li class="info_7">¥6300</li>
		  	  	<li>
		  	  		<a href="javascript:viod(0)" onclick="deleteByThis(this),countMoney()">洗掉</a><br />
		  	  		<a>已到我的關注</a>
		  	  	</li>
		  	  </ul>
		  </div>
		
		 <div class="info warp">
		  	
		  	  <ul>
		  	  	<li class="info_1"><input type="checkbox" name="select" onclick="isSelectAllPlus(),countMoney()"/> </li>
		  	  	<li class="info_2"> <img src="img/img1.jpg" width="80px"/> </li>
		  	  	<li class="info_3"><a>刀鋒之影</a></li>
		  	  	<li class="info_4"><a>經典皮膚</a> </li>
		  	  	<li class="info_5">6300</li>
		  	  	<li class="info_6">
		  	  		<button onclick="checkAdd(this,1),isSelectAllPlus(),countMoney()">-</button>
		  	  		<input type="text" name="" id="" value="1" />
		  	  		<button class="bot" onclick="checkAdd(this,2),isSelectAllPlus(),countMoney()">+</button>
		  	  		
		  	  	</li>
		  	  	<li class="info_7">¥6300</li>
		  	  	<li>
		  	  		<a href="javascript:viod(0)" onclick="deleteByThis(this),countMoney()">洗掉</a><br />
		  	  		<a>已到我的關注</a>
		  	  	</li>
		  	  </ul>
		  </div>
		   <div class="info warp">
		  	  <ul>
		  	  	<li class="info_1"><input type="checkbox" name="select"  onclick="isSelectAllPlus(),countMoney()"/> </li>
		  	  	<li class="info_2"> <img src="img/img1.jpg" width="80px"/> </li>
		  	  	<li class="info_3"><a>刀鋒之影</a></li>
		  	  	<li class="info_4"><a>經典皮膚</a> </li>
		  	  	<li class="info_5">6300</li>
		  	  	<li class="info_6">
		  	  		<button onclick="checkAdd(this,1),isSelectAllPlus(),countMoney()">-</button>
		  	  		<input type="text" name="" id="" value="1" />
		  	  		<button class="bot" onclick="checkAdd(this,2),isSelectAllPlus(),countMoney()">+</button>
		  	  		
		  	  	</li>
		  	  	<li class="info_7">¥6300</li>
		  	  	<li>
		  	  		<a href="javascript:viod(0)" onclick="deleteByThis(this),countMoney()">洗掉</a><br />
		  	  		<a>已到我的關注</a>
		  	  	</li>
		  	  </ul>
		  	
		  	
		  </div>
		<!--商品詳情展示結束-->
		<!--結算開始-->
	   <div class="balance warp">
	   	   <ul class="balance_ul1">
	   	   	<li>		
	   	   		<input type="checkbox" name="select" id="" value=""  onclick="isSelectAll(this),isSelectAllPlus(this),countMoney()"/>
	   	   		全選
	   	   	</li>
	   	   	<li><a>洗掉選中商品</a></li>
	   	   	<li><a>移到我的關注</a></li>
	   	   	<li><a>清除下柜商品</a></li>
	   	   </ul>
	   	   
	   	   <ul class="balance_ul2">
	   	   	
	   	   	 <li>已經選擇<span id="snum">0</span>件商品</li>
	   	   	 <li>總價 <span id="countMoney">¥0</span></li>
	   	   	 <li>
	   	   	 	<button class="butt">去結算</button>
	   	   	 </li>
	   	   </ul>
	   </div>
		<!--結算結束-->
	</body>
</html>

Vue框架

Vue這個框架一般多用于前后端分離的專案,就像我上班的時候前端很多都是用Vue框架,前后端分離的好處就是可以讓我們后端程式員只關心后端的代碼,不用去管前端,還有就是開發的時候前端和后端各顧各的,不用誰先等誰寫完,后端程式員用Responsebody發個Json給前端就沒啥事了,其他的頁面效果都讓他們寫,,,我也是因為長期這樣,所以前端學的特別差,不過呢,前面我也說了我是打算自己全堆疊的來做一次分布式電商專案,我自己的電商專案可能還是會使用bootstrap框架,個人也更喜歡那個,

學習

學習框架這一塊呢,有時間可以買本書系統的學,也可以去vue官網看教程和API,真正系統的學習Vue內容還是很豐富的,我這里之所以一天學兩個框架,是因為一方面我從事的是后端開發,并不是靠前端吃飯,我也想國慶以后再慢慢深入,二方面是這個東西我個人認為,還是多在專案中實踐才不容易忘,不然長期不用也還是會忘記的,就像我們用慣了鍵盤打字以后,就很容易提筆忘字一個道理,

實作前后端分離的常用前端框架,

Vue框架用的很多,但并不是唯一,其他的前后端分離框架也有,最常用的有三款,

Vue.js 小巧,靈活,功能卻很強大,在市場上占有率更高,屬于成熟穩定的框架,

React相比Vue.js更新一些,近幾年有追趕Vue.js的架勢,更適合做移動專案,

AngularJS相比Vue更加大量一些,只有在一些大型專案中才可能被使用,

安裝

安裝直接運行安裝軟體就可以了,然后輸入CMD進入命令列,輸入node-v和npm-v看見版本號就知道是否安裝成功,然后下面的命令也都是在CMD命令列里面使用

安裝淘寶鏡像
npm install -g cnpm --registry=https://registry.npm.taobao.org
安裝webpack
cnpm install -g webpack webpack-cli
安裝 Vue Cli
cnpm install -g @vue/cli
安裝Vue.js插件(我這里是用IDEA),創建專案的時候名字最好不要大寫

在這里插入圖片描述

template和script互動

<template>
  <div id="app">
        <div>
            我是{{name}},我的上司是{{king}}

            我是{{person.name}} 今年 {{person.age}} 歲
        </div>
  </div>
</template>

<script>
    // export是一個資料物件,我們可以寫多個屬性或者函式
    export default {
        data(){
            return{
                name:"諸葛亮",
                king:"劉禪",
                person:{
                    name:"小明",
                    age : 16
                }
            }
        }
    }
</script>

條件判斷加單機事件

<!--   template  -->
	 <div>
            我是{{person.name}} 今年 {{person.age}} 歲

            <!--  單擊事件,直接寫動作,然后用 v-on: 系結  -->
            <input type="button" v-on:click="person.age = person.age + 1" value="年齡 + 1"/>
            <!--  也可以在下面定義一個函式(也可以叫方法)拿來呼叫,系結的話也可以用@來作為v-on的簡寫   -->
            <input type="button" @click="AddAge" value="年齡-1"/>
            <!--  if判斷  -->
            <span v-if="person.age<18">未成年</span>
            <span v-else-if="person.age >= 18 && person.age < 35">青年</span>
            <span v-else-if="person.age >= 35 && person.age < 50">壯年</span>
            <span v-else-if="person.age >= 50 && person.age < 60">中年</span>
            <span v-else>老年</span>
        </div>
<!--  script : export default -->
   methods:{
            //定義當前組件中可以使用的所有函式
            AddAge:function () {
                this.person.age = this.person.age - 1;
            }
        }

回圈陳述句

<!--   template  -->
		<div>
            <!--
              v-bind:key 系結一個變數,相當于定義一個臨時變數
              v-for="變數 in 集合" 變數是使用某已有變數,不能定義新變數,
             -->
                學校學院分別有
                <ul>
                    <li v-for="My in MyClass" v-bind:key="My">
                        學院{{My.name}} 班級數 {{My.number}}
                    </li>
                </ul>
        </div>
<!--  script : export default -->
		//在return回傳下面再定義一個陣列,我們等下用回圈來遍歷
            MyClass:[
                {"name":"資訊工程系","number":8},
                {"name":"機電工程系","number":6},
                {"name":"經濟管理系","number":7}
            ]

Html支持

如果希望能夠決議HTML,必須使用v-html指令,v-html是任意HTML標簽的屬性,v-html的取值可以是Model中定義的欄位,

<!--  template  -->
<span v-html="MyJava"></span>
<!--  script data() return~   -->
MyJava:"我愛<b>Java</b>編程"

組件

組件:如果專案中多次用到類似效果,就可以把這個效果進行自定義組件,新建專案后默認存在HelloWorld.vue就是一個組件,組件檔案必須匯入才能使用,其中Helloworld為自定義名稱,通過這個名稱就可以呼叫對應組件,如果import時直接寫組件名(大小寫相同)IDEA會提升生成組件的路徑,所以一般習慣上都是把名稱定義為組件檔案名,components: 組件檔案只import是不能被使用的,必須在components中注冊組件,注冊后在中就可以通過組件名直接參考組件了,在中組件以標簽形式存在,標簽名為組件名,其中msg是在Helloworld中定義的props引數,表示需要傳遞給組件的資料,

在src下面的components目錄新建一個檔案,名字隨便取
<template>
    <div>
        <div>這是一個組件</div>
        <!--  獲取組件傳遞的引數名稱和型別  -->
        <div>{{MyLove}}</div>
    </div>
</template>

<script>
    export default {
        //我的組件名
        name: "MyComponents",
        //props:定義組件傳遞的引數名稱和型別
        props:{
            MyLove:String
        }
    }
</script>

<style scoped>

</style>
現在回到剛剛那個地方
<template>
	<div id="app">
		<div>
        	  <MyComponents MyLove="Java"/>
    	  </div>
	</div>
</template>
<script>
 //匯入,不匯入會報錯
    import MyComponents from "@/components/MyComponents";
    // export是一個資料物件,我們可以寫多個屬性或者函式
    export default {
        components:{
            MyComponents
        },
 </script>

bootstrap框架

bootstrap官網

菜鳥教程

bootstrap框架也是我比較喜歡的一個框架,經過了四天的學習,明天第五天是要開始做專案了,雖然今天和昨天也做了專案,但那都是基于底層的,如果是要做比較大的專案會很費勁,就像我剛剛的那個購物車,僅僅只是一個頁面,我光CSS代碼就寫了三百多行,這樣一來效率是很低的,后天就差不多可以開始為電商做準備了,

bootstrap的官網也好還是菜鳥教程都有檔案和API,官方博客等都可以看一看,如果沒有能力盲寫代碼的話,其實看著API寫代碼也并沒有什么不好,事實上我每次寫前端代碼都是看著API寫的,就像JavaScript那么多事件和方法,HTML那么多標簽,我也很難做到全都記住,就把它們當成字典就好了,邏輯思維其實才是更重要的,這也是為什么很多地方都喜歡面試問演算法的原因,

柵格系統

Bootstrap包含了一個回應式的、移動設備優先的、不固定的網格系統,可以隨著設備或視口大小的增加而適當地擴展到12列,它包含了用于簡單的布局選項的預定義類,也包含了用于生成更多語意布局的功能強大的混合類,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		
		<title>Document</title>	
		<link rel="stylesheet" href="../css/bootstrap.css"/>
		<script type="text/javascript" src="../js/jquery-1.9.1.js"></script>
		<script type="text/javascript" src="../js/bootstrap.js"></script>

	</head>
	<body>
		<div class="container">
		    <div class="row" >
		        <div class="col-xs-6 col-sm-3" 
		            style="background-color: #dedef8;
		            box-shadow: inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
		            <p>我熱愛資料結構與演算法分析</p>
		        </div>
		        <div class="col-xs-6 col-sm-3" 
		        style="background-color: #dedef8;box-shadow: 
		        inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
		            <p>
						bootstrap是一個非常流行的框架
		            </p>
		            <p>
						C語言是一門面向程序的編程語言
		            </p>
		        </div>
		 
		        <div class="clearfix visible-xs"></div>
		 
		        <div class="col-xs-6 col-sm-3" 
		        style="background-color: #dedef8;
		        box-shadow:inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
		            <p>
						C++是一個面向物件的編程語言
		            </p>
		        </div>
		        <div class="col-xs-6 col-sm-3" 
		        style="background-color: #dedef8;box-shadow: 
		        inset 1px -1px 1px #444, inset -1px 1px 1px #444;">
		            <p>
						分布式
		            </p>
		        </div>
		    </div>
		</div>
	</body>
</html>

在這里插入圖片描述

查看原始碼

平時呢,寫Java代碼的時候總會遇到各種各樣的類,各種各樣的框架,所以,要了解一個沒見過的框架最快速的方法就是看原始碼,看原始碼,不僅方便學習框架,也方便學習里面的演算法,同樣的道理放到JavaScript里面,也是行得通的,

在剛剛寫購物車的時候,臨時學了下CSS,其實我過去很少接觸這玩意兒...因為后端學習HTML和JavaScript里面的Ajax和Json就已經足夠了,jstl和thymeleaf等技術都有它們自己獨特的語法,不過,現在我知道CSS檔案對應著HTML頁面的class,所以更換樣式的話也可以根據CSS檔案里面的樣式,把class的名字改成框架里面CSS的名字就可以了~

比如我可以把剛才的柵格系統換一個樣式,其實也很簡單,直接打開bootstrap的原始碼就可以了,搜索我剛剛使用的col-lg-6,找到它,我可以換成一個和它同類的樣式,看看變化,

在這里插入圖片描述

當我把所有的col-lg-6換成10以后,樣式就變成了這個樣式,其實只要肯看原始碼,學習起來還是特別迅速的,雖然我不怎么學前端,但是把學習Java的這個概念移植過來,道理也還是那個道理,


在這里插入圖片描述

BootStrap組件

在bootstrap官網里面有很多很多的組件原始碼參考,要用的時候可以直接拿過來,或者拿過來再修改一點點

在這里插入圖片描述

Bootstrap按鈕

		<button type="button" class="btn btn-primary">主要</button>
		<button type="button" class="btn btn-secondary">副手</button>
		<button type="button" class="btn btn-success">成功</button>
		<button type="button" class="btn btn-danger">危險</button>
		<button type="button" class="btn btn-warning">警告</button>
		<button type="button" class="btn btn-info">資訊</button>
		<button type="button" class="btn btn-light">明亮</button>
		<button type="button" class="btn btn-dark">黑暗</button>
		<button type="button" class="btn btn-link">鏈接</button>

在這里插入圖片描述

按鈕組

		<div class="btn-group" role="group" aria-label="Basic example">
		  <button type="button" class="btn btn-secondary">左邊</button>
		  <button type="button" class="btn btn-secondary">中間</button>
		  <button type="button" class="btn btn-secondary">右邊</button>
		</div>
小彈窗(英文翻譯是卡片...我感覺不太對勁所以就理解成小彈窗)

在這里插入圖片描述

		<div class="card" style="width: 18rem;">
		  <img src="..." class="card-img-top" alt="...">
		  <div class="card-body">
		    <h5 class="card-title">Card title</h5>
		    <p class="card-text">一些快速的示例文本可在卡標題上構建,并構成卡內容的大部分,</p>
		    <a href="#" class="btn btn-primary">跳轉</a>
		  </div>
		</div>

輪播

	<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
		  <div class="carousel-inner">
		    <div class="carousel-item active">
		        <img src="../img/tree.png" class="d-block w-100" alt="..." height="200">
		    </div>
		    <div class="carousel-item">
		      <img src="../img/wather.png" class="d-block w-100" alt="..." height="200">
		    </div>
		    <div class="carousel-item">
		      <img src="../img/montain.png" class="d-block w-100" alt="..." height="200">
		    </div>
		  </div>
		</div>

其實還有好多好多東西,我就不一 一再CSDN上面試了,其實這個框架最主要還是要學會前后端互動,不過前后端互動可能就要等到寫專案的時候了,因為平時上班我也只是發個Json給前端就不管不問了,這次全堆疊的來寫一個大專案,還是要多多學習的,今天就用Bootstrap隨便寫一個登陸頁面和后臺管理就結束了吧,

使用BootStrap實作一個登錄框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		
		<title>Document</title>	
		<link rel="stylesheet" href="../css/bootstrap.css"/>
		<script type="text/javascript" src="../js/jquery-1.9.1.js"></script>
		<script type="text/javascript" src="../js/bootstrap.js"></script>
		
	</head>
	<body background="../img/tree.png"; style=" background-repeat:no-repeat ;background-size:100% 100%; background-attachment: fixed;">
	    <div class="modal-dialog" style="margin-top: 10%;">
	        <div class="modal-content">
	            <div class="modal-header">
	 
	                <h4 class="modal-title text-center" id="myModalLabel">登錄</h4>
	            </div>
	            <div class="modal-body" id = "model-body">
	                <div class="form-group">
	 
	                    <input type="text" class="form-control"placeholder="用戶名" autocomplete="off">
	                </div>
	                <div class="form-group">
	 
	                    <input type="password" class="form-control" placeholder="密碼" autocomplete="off">
	                </div>
	            </div>
	            <div class="modal-footer">
	                <div class="form-group">
	                    <button type="button" class="btn btn-primary form-control">登錄</button>
	                </div>
	                <div class="form-group">
	                    <button type="button" class="btn btn-default form-control">注冊</button>
	                </div>
	            </div>
	        </div>
	    </div>
	</body>
</html>

在這里插入圖片描述


剛剛在網上隨便找了張圖片做背景,今天先學到這里,明天還是老規矩,先用JavaScript實作一個資料結構,鞏固語法的記憶,然后就來一個SpringBoot和Bootstrap聯合的小專案,國慶七天!絕不頹廢!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/159739.html

標籤:區塊鏈

上一篇:CTF ics-04

下一篇:鏈表看這篇就夠了

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more