sass+require實現側邊欄

来源:http://www.cnblogs.com/candice-cc/archive/2016/09/22/5892937.html
-Advertisement-
Play Games

一、效果圖(如下)及使用的技術 實現用sass實現頁面中右側固定側邊欄的樣式,用require.js實現返回頂部的功能 二、sass 具體的sass的介紹就不多說了,大家可以參考sass官網介紹,下麵說一下sass的兩種編譯方法; a、koala編譯 koala 是一款桌面程式,支持 less 、 ...


 

一、效果圖(如下)及使用的技術

    實現用sass實現頁面中右側固定側邊欄的樣式,用require.js實現返回頂部的功能

二、sass

    具體的sass的介紹就不多說了,大家可以參考sass官網介紹,下麵說一下sass的兩種編譯方法;

    a、koala編譯

      koala 是一款桌面程式,支持 less 、 sass 、 coffeescript 即時編譯。下載地址:http://koala-app.com/

      

     koala可以直接對scss進行編譯,不需要敲命令,並且可以對scss進行監控,具體使用方法見:http://www.w3cplus.com/preprocessor/sass-gui-tool-koala.html

   註:此種編譯方法比較方便,只要下載koalo即可,新建*.scss文件,拖進工作區點擊”完成“,即可,並且可以監控添加到工作區的文件,不用每次點擊編譯;

  b、sass命令編譯(推薦)

    此方法需要進行以下步驟:

    (1)因為sass依賴於ruby環境,所以裝sass之前先確認裝了ruby。官網下載:ruby

            在安裝的時候,請勾選Add Ruby executables to your PATH這個選項,添加環境變數,不然以後使用編譯軟體的時候會提示找不到ruby環境

            

      (2)安裝完ruby之後,在開始菜單中,找到剛纔我們安裝的ruby,打開Start Command Prompt with Ruby

            

          然後在命令行中直接輸入:

 gem install sass

          按回車安裝,如果安裝不成功,可以直接在http://www.w3cplus.com/sassguide/install.html 中下載圖中的“sass安裝文件”

          

     下載之後放到ruby的安裝目錄下的gems文件夾中即可(如下圖)

 

     

 

     安裝完成後可以在命令行中輸入命令:

       * 查看sass版本的命令行為

sass -v

 

       * 你也可以運行幫助命令行來查看你需要的命令

sass -h

       * 單文件轉換命令

  sass style.scss style.css

      * 單文件監聽命令

sass --watch style.scss:style.css

       * 文件夾監聽命令

sass --watch sassFileDirectory:cssFileDirectory

三、require.js使用基礎

       新建一個目錄,結構如下

       

       目錄toolbar下有index.html、jquery-1.11.3js、main.js、require.js。require.js和jquery-1.11.3.js去各自官網下載即可。

       index.html如下:

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <title>requirejs</title>
 5         <meta charset="utf-8">
 6         <script data-main="js/main" src="js/require.js"></script>
 7     </head>
 8     <body>
 9      
10     </body>
11 </html>
12   

 

      使用requirejs很簡單,只需要在head中通過script標簽引入它(實際上除了require.js,其它文件模塊都不再使用script標簽引入)。

      細心的同學會發現script標簽上了多了一個自定義屬性:data-main="main",等號右邊的main指的main.js。當然可以使用任意的名稱。

      這個main指主模塊或入口模塊,好比c或java的主函數main。

      main.js如下

1 require.config({
2     paths: {
3         jquery: 'jquery-1.11.3'//此處用不用添加.js尾碼,否則執行的時候會報錯
4     }
5 });
6  
7 require(['jquery'], function($) {
8     alert($().jquery);
9 });

 

     main.js中就兩個函數調用require.config和require。

     require.config用來配置一些參數,它將影響到requirejs庫的一些行為。

     require.config的參數是一個JS對象,常用的配置有baseUrl,paths等。

     這裡配置了paths參數,使用模塊名“jquery”,其實際文件路徑jquery-1.11.3.js(尾碼.js可以省略)。

 

     註:有些同學習慣用npm 來下載相關文件,在這裡有一點需要註意的是:

     下載require.js的命令是:

npm install requirejs

     而不是( 註 意 )

npm install require.js   

 

四、功能實現

      項目目錄結構如下:

      

      在命令行輸入命令如下,對scss文件夾進行監聽並將scss中的scss文件編譯到css文件夾中;

     

1、html部分:

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>toolbar</title>
  6     <link rel="stylesheet" href="css/index.css">
  7 
  8 </head>
  9 <body>
 10 <div class="toolbar">
 11     <a href="javascript:;" class="toolbar-item toolbar-item-weixin">
 12         <span class="toolbar-layout"></span>
 13     </a>
 14     <a href="javascript:;"  class="toolbar-item toolbar-item-feedback"></a>
 15     <a href="javascript:;"  class="toolbar-item toolbar-item-app">
 16         <span class="toolbar-layout"></span>
 17     </a>
 18     <a id="backTop" href="javascript:;"  class="toolbar-item toolbar-item-top">
 19         <span class="toolbar-btn"></span>
 20     </a>
 21 </div>
 22 <!--下麵部分是為了使頁面出現滾動條,方便測試-->
 23 <p>測試</p>
 24 <p>測試</p>
 25 <p>測試</p>
 26 <p>測試</p>
       ...
119 <p>測試</p>
120 <p>測試</p>
121 <p>測試</p>
122 <p>測試</p>
123 <script src="js/require.js" data-main="js/main"></script>
124 </body>
125 </html>

 

 2、css & scss部分:   

   scss文件夾中的:

         (1) _mixin.scss: scss可以像js一樣,將一些公共的樣式封裝成函數,便於重覆利用

 1 @mixin opacity($opacity){
 2   opacity: $opacity;
 3   filter: opacity($opacity * 100);
 4 }
 5 @mixin transform-origin ($transform-origin){
 6   transform-origin: $transform-origin;
 7   -webkit-transform-origin: $transform-origin;
 8   -o-transform-origin: $transform-origin;
 9   -ms-transform-origin: $transform-origin;
10   -moz-transform-origin: $transform-origin;
11 }
12 @mixin scale($scale){
13   transform: scale($scale);
14   -webkit-transform: scale($scale);
15   -o-transform: scale($scale);
16   -ms-transform: scale($scale);
17   -moz-transform: scale($scale);
18 }
19 @mixin transition($transition){
20   transition: $transition;
21   -webkit-transition: $transition;
22   -o-transition: $transition;
23   -ms-transition: $transition;
24   -moz-transition: $transition;
25 }

     (2) toobar.scss : 該模塊中的自有樣式(只在自個模塊中使用的)

     

 1 @import "mixin";
 2 @mixin toolbar-item($pos,$hoverPos){
 3   background-position: 0 $pos;
 4   &:hover {
 5     background-position: 0 $hoverPos;
 6   }
 7 
 8 }
 9 $toolbar-size: 52px;
10 
11 .toolbar-item, .toolbar-layout {
12   background-image: url(../img/toolbar.png);
13   background-repeat: no-repeat;
14 }
15 .toolbar {
16   position: fixed;
17   left: 50%;
18   bottom: 100px;
19   margin-left: -$toolbar-size / 2;
20 }
21 .toolbar-item {
22   position: relative;
23   display: block;
24   width: $toolbar-size;
25   height: $toolbar-size;
26   margin-top: 1px;
27 
28   @include transition(background-position 1s);
29   &:hover {
30     .toolbar-layout {
31       @include opacity(1);
32       @include scale(1);
33       @include transition(all 1s);
34     }
35   }
36 
37 }
38 .toolbar-layout {
39   position: absolute;
40   right: $toolbar-size - 5;
41   bottom: 0;
42   width: 172px;
43   @include transform-origin(95% 95%);
44   @include opacity(0);
45   @include scale(0.01);
46   @include transition(all 1s);
47 
48 }
49 .toolbar-item-weixin {
50   @include toolbar-item(-798px, -860px);
51 
52   .toolbar-layout {
53     height: 212px;
54     background-position: 0 0;
55   }
56 }
57 
58 .toolbar-item-feedback {
59   @include toolbar-item(-426px,-488px);
60 
61 }
62 .toolbar-item-app {
63   @include toolbar-item(-550px,-612px);
64 
65   .toolbar-layout {
66     height: 194px;
67     background-position: 0 -222;
68   }
69 }
70 .toolbar-item-top {
71   @include toolbar-item(-674px,-736px);
72   
73 }

    (3) index.scss: 該項目引入的樣式文件,編譯後為index.css,在html中只引入index.css,便於文件管理

    

1 @import "toolbar";

  3、js部分:

   (1)jquery-1.11.3.js和require.js是該項目的依賴,可從各自官網下載,也可以通過npm下載,html中只引入require.js即可

   (2)main.js是項目的入口文件

require.config({
  paths:{
    jquery:"./jquery-1.11.3"
  }

});

require(['jquery',"backtop"],function ($,backTop) {
  var backTop = new backTop.BackTop($("#backTop"),{//構造函數實例化
    mode:"move",
    dest:0,
    speed:500
  });
});

  (3)backtop.js:

 1 define(["jquery","scrollTo"],function($,scrollTo){
 2 
 3   function BackTop(el,opts){
 4 
 5     this.opts = $.extend({},BackTop.defaults,opts);
 6     this.$el =$(el);
 7 
 8     this.scroll = new scrollTo.ScrollTo({
 9       dest: 0,
10       speed:this.opts.speed
11     });
12 
13     if(this.opts.mode === "move"){
14       this.$el.on("click", $.proxy(this._move,this));//改變this指向
15 
16     }else {
17       this.$el.on("click", $.proxy(this._go,this));//改變this指向
18 
19     }
20 
21     this._checkPosition();
22     $(window).on("scroll",$.proxy(this._checkPosition,this));
23 
24   };
25 
26 
27 
28   BackTop.defaults = {
29     mode:'move',//返回頂部的方式,直接返回還是動畫返回
30     pos:$(window).height(),//返回頂部按鈕顯示隱藏的初始值
31     speed:800
32   }
33 
34   BackTop.prototype._move = function(){
35     this.scroll.move();
36   }
37   BackTop.prototype._go = function(){
38     this.scroll.go();
39   }
40   BackTop.prototype._checkPosition = function(){
41 
42     var $el = this.$el;
43 
44     if($(window).scrollTop() > this.opts.pos){
45 
46       $el.fadeIn();
47     }else {
48       $el.fadeOut();
49     }
50   };
51 
52   return {BackTop:BackTop}
53 
54 });

(4)scrollTo.js

 1 define(["jquery"],function($){
 2 
 3   function ScrollTo(opts){
 4 
 5     this.opts = $.extend({},ScrollTo.defaults,opts);
 6 
 7     this.$el = $("html,body");
 8 
 9   };
10 
11   ScrollTo.prototype.move = function(){
12     var opts = this.opts;
13     var dest = opts.dest;
14     //防止動畫未結束多次執行動畫
15     if($(window).scrollTop() != dest){//判斷是否到達目的地
16 
17       if(!this.$el.is(":animated")){//判斷是否在運動
18 
19         this.$el.animate({
20           scrollTop:dest
21         },opts.speed);
22       }
23     }
24 
25   };
26   ScrollTo.prototype.go = function(){
27 
28     var dest = this.opts.dest;
29 
30     if($(window).scrollTop() != dest){
31       this.$el.scrollTop(dest);
32     }
33 
34   };
35   ScrollTo.defaults = {
36     dest: 0,//目的地
37     speed:800//滾動速度
38   };
39   return {
40     ScrollTo:ScrollTo
41   }
42 });

 

 

    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是Ring Buffer?顧名思義,就是一個記憶體環,每一次讀寫操作都迴圈利用這個記憶體環,從而避免頻繁分配和回收記憶體,減輕GC壓力,同時由於Ring Buffer可以實現為無鎖的隊列,從而整體上大幅提高系統性能。 ...
  • Atitit利用反射獲取子類 集合 以及繼承樹 想從父類往下找子類的確是不可能的,要知道只要類不是final的話誰都有繼承它的自由不需要事前通知父類。Eclipse實現不是重父類開始找而是重子類往回找,然後在逐個匹配。 很簡單,遍歷源代碼目錄下的所有類文件,根據類定義行通過字元串匹配找出繼承該類的所 ...
  • 最近又把《大型網站技術架構》看了一遍.而中間讀了一本《電腦操作系統》的教材後,感覺對大型網站的技術架構有更深的瞭解。在此結合對這兩本書的理解做一些筆記 傳統的OS(Operator System)有四個基本的功能: a) 進程式控制制 b) 進程同步 c) 進程通信 d) 調度 2.存儲器管理 a) ...
  • 回到目錄 對於Lind.DDD架構,我之前寫了不少文章,對於它的Domain模式也介紹了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatusBehavor和ISortBehavor都有自己的功能,只要實體實現對外的介面,就具有了某種特性或 ...
  • 遍曆數組通常使用for迴圈,ES5的話也可以使用forEach,ES5具有遍曆數組功能的還有map、filter、some、every、reduce、reduceRight等,只不過他們的返回結果不一樣。但是使用foreach遍曆數組的話,使用break不能中斷迴圈,使用return也不能返回到外層 ...
  • 一、Jquery的插件簡介 (一)什麼是插件 插件(Plug-in)是一種遵循一定的應用程式介面規範編寫出來的程式,是原有系統平臺或應用軟體平臺功能的一種擴展和補充。 註意!!其只能在程式規定的系統平臺下運行,而不能脫離指定平臺單獨利用。 (二)查找插件和幫助網址 1)http://jqueryui ...
  • ...
  • 先將表單數值轉換成數組存儲,存儲成的格式為[{"name":"","value":""},.....}] 將formArray轉換成Json格式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...