主頁 >  其他 > 四天學會JavaScript~Day4

四天學會JavaScript~Day4

2020-10-06 17:25:14 其他

四天學會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/qita/159796.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)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

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

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more