jquery-leonaScroll-1.1-自定義滾動條插件

来源:http://www.cnblogs.com/leona-d/archive/2016/09/17/5878182.html
-Advertisement-
Play Games

leonaScroll-1.1最新版-豎向 leonaScroll-1.1.js歡迎使用leonaScroll-1.1.js,此滾動條僅支持豎向滾動,如您在使用過程中發現更多問題,歡迎指正! 更新:1.1版本1、修複了前面初始版本中的一些bug,比如不能自適應用戶的文本內容,css文件繁雜2、用戶只 ...


leonaScroll-1.1最新版-豎向

leonaScroll-1.1.js
歡迎使用leonaScroll-1.1.js,此滾動條僅支持豎向滾動,如您在使用過程中發現更多問題,歡迎指正!


更新:1.1版本
1、修複了前面初始版本中的一些bug,比如不能自適應用戶的文本內容,css文件繁雜
2、用戶只需調用一個方法即可使用該插件,無需按照原來的class類名去添加和定義你的滾動條文本域及外層元素,顯得更為自由
3、增設了滾動條寬度、上下微調按鈕高度,滾動文本區域的設置
4、增設了文本內容未超出時是否顯示滾動條可選設置選項,如不設置,預設為不顯示
5、增設了滾動文本寬度的可選設置選項,如不設置會自動為您適配到最佳寬度


使用方法:
1、建立好您的Html,引用jquery框架與mousewheel插件,及我們的leonaScroll-1.1.js插件
2、使用$("").LeonaScroll({speed,scroll_text,sWidth,updownH})調用插件
3、屬性說明:
speed 滾動速度,必須
scroll_text 滾動文本內容class,必須
sWidth 滾動條寬度,必須
 updownH 上下微調按鈕高度,必須
scrollbar 文本內容未超出時是否顯示滾動條,顯示為false,不顯示為true,可選,預設為true
 text_width 滾動文本寬度,可選

 

leonaScroll-1.0僅供學習參考使用,該版本為本人學習時思路版,尚有不足,新版本修複了很多問題,但仍然存在著二次調用問題。不過已經有瞭解決方案,只是本人比較賴,沒有修複,等待1.2版本修複吧!哈哈!

當然如果有人使用後遇到bug或者不方便的地方,歡迎提出,以便本人繼續改進。

學習之餘寫的小插件,如有什麼不足之處,還望見諒。

最後感謝在本插件開發過程中,幫助和解答過我疑問的朋友。尤其感謝Delevin先生的大力解惑!

廢話不說了,附js代碼和下載地址

一、Html+Css

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <meta charset="utf-8" />
 7     <script src="js/jquery-1.10.2.js" type="text/javascript"></script>
 8     <script src="js/mousewheel.js" type="text/javascript"></script>
 9     <script src="js/leonaScroll-min-1.1.js" type="text/javascript"></script>
10     <style type="text/css">
11         .left,.Explain,.center,.welcome,.right,.usage{ height:300px;}
12         .left,.Explain,.Explain_text{ width:200px;}
13         .right,.usage,.usage_text{ width:700px;}
14         .center,.welcome,.welcome_text{ width:300px;}
15         .left,.right,.center{ padding:10px; padding-right:0; float:left; margin-right:10px; background-color: #cac9c9;}
16         .Explain_text,.welcome_text,.usage_text { font-size: 14px; line-height: 30px; background-color: #cac9c9; color: #000000; }
17     </style>
18 </head>
19 
20 <body>
21     <div class="left">
22         <div class="Explain sss">
23             <div class="Explain_text">
24                 leonaScroll-1.1.js
25                 <br />介紹:是一款基於jquery框架,結合mousewheel插件實現的自定義滾動條
26                 <br /><span style="color:red">(未超出可顯示文本區域時,要求顯示滾動條)</span>
27             </div>
28         </div>
29     </div>
30 
31     <div class="center">
32         <div class="welcome">
33             <div class="welcome_text">
34                 leonaScroll-1.1.js
35                 <br />歡迎使用leonaScroll-1.1.js,如您在使用過程中發現更多問題,歡迎指正!
36                 <br />作者:leona
37                 <br />發佈時間:2016-6-16
38                 <br />博客:<a href="http://www.cnblogs.com/leona-d/">http://www.cnblogs.com/leona-d/</a>
39                 <br /><span style="color:red">(未超出可顯示文本區域時,預設不顯示滾動條)</span>
40             </div>
41         </div>
42     </div>
43 
44     <div class="right">
45         <div class="usage">
46             <div class="usage_text">
47                 leonaScroll-1.1.js
48                 <br />歡迎使用leonaScroll-1.1.js,如您在使用過程中發現更多問題,歡迎指正!
49                 <br />更新:1.1版本
50                 <br />1、修複了前面初始版本中的一些bug,比如不能自適應用戶的文本內容,css文件繁雜
51                 <br />2、用戶只需調用一個方法即可使用該插件,無需按照原來的class類名去添加和定義你的滾動條文本域及外層元素,顯得更為自由
52                 <br />3、增設了滾動條寬度、上下微調按鈕高度,滾動文本區域的設置
53                 <br />4、增設了文本內容未超出時是否顯示滾動條可選設置選項,如不設置,預設為不顯示
54                 <br />5、增設了滾動文本寬度的可選設置選項,如不設置會自動為您適配到最佳寬度
55                 <br />使用方法:
56                 <br />1、建立好您的Html,引用jquery框架與mousewheel插件,及我們的leonaScroll-1.1.js插件
57                 <br />2、使用$("")..LeonaScroll({speed,scroll_text,sWidth,updownH})調用插件
58                 <br />3、屬性說明:
59                 <br />   speed         滾動速度,必須
60                 <br />   scroll_text   滾動文本內容class,必須
61                 <br />   sWidth        滾動條寬度,必須
62                 <br />   updownH       上下微調按鈕高度,必須
63                 <br />   scrollbar     文本內容未超出時是否顯示滾動條,顯示為false,不顯示為true,可選,預設為true
64                 <br />   text_width    滾動文本寬度,可選
65             </div>
66         </div>
67     </div>
68     <script type="text/javascript">
69         //滾動條調用方法
70         $(".Explain").LeonaScroll({ speed: 20, scroll_text: ".Explain_text", sWidth: 14, updownH: 20, scrollbar: false});
71         $(".welcome").LeonaScroll({ speed: 20, scroll_text: ".welcome_text", sWidth: 14, updownH: 20 });
72         $(".usage").LeonaScroll({ speed: 20, scroll_text: ".usage_text", sWidth: 14, updownH: 20 });
73     </script>
74 
75 </body>
76 </html>

二、Jquery

  1 $.fn.extend({
  2     generateUUID: function () {
  3         //唯一ID數值生成
  4         var d = new Date().getTime();
  5         var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  6             var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
  7         }); return uuid;
  8     },
  9 
 10     LeonaScroll: function (parameter) {
 11         var Sname = $(this).selector;
 12         return this.each(function () {
 13             //變數聲明
 14             var elem = $(this), celem = $(this).find(parameter.scroll_text), index = $(this).generateUUID(), text_hidden = $(elem).height(), con_width = $(elem).width();
 15 
 16             //添加滾動條Html
 17             var scrollHTML = "";
 18             scrollHTML += "<div class='scroll_up leonaup" + index + "'></div>";
 19             scrollHTML += "<div class='scroll_cen leonacen" + index + "'><div class='scroll_button leonabutton" + index + "'></div></div>";
 20             scrollHTML += "<div class='scroll_down leonadown" + index + "'></div>";
 21             $(elem).append("<div class='scroll leonas" + index + "'> " + scrollHTML + "</div>");
 22 
 23             //添加滾動條CSS
 24             var scrollStyle = "";
 25             scrollStyle += "body { -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit瀏覽器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期瀏覽器*/ user-select: none; }";
 26             scrollStyle += Sname + "{ position: relative; overflow-y: hidden; clear:none ; }";
 27             scrollStyle += parameter.scroll_text + "{width:" + (parameter.text_width === undefined ? (con_width - parameter.sWidth) : parameter.text_width) + "px; word-break: break-word; position: absolute; left: 0; top: 0; clear:both; }";
 28             scrollStyle += ".scroll { height:" + text_hidden + "px; float:right; }";
 29             scrollStyle += ".scroll,.scroll .scroll_cen, .scroll .scroll_up, .scroll .scroll_down { width:" + parameter.sWidth + "px; }";
 30             scrollStyle += ".scroll .scroll_up, .scroll .scroll_down {height:" + parameter.updownH + "px; line-height: " + parameter.updownH + "px;  color: #ffffff; font-size: 12px; font-weight: bold; background-image:url(img/bw.png); background-color:#161515; background-repeat:no-repeat; cursor: pointer;}";
 31             scrollStyle += ".scroll .scroll_up{background-position: 0px 6px; border-radius:5px 5px 0 0;  }";
 32             scrollStyle += ".scroll .scroll_down{ background-position:0px -49px; border-radius:0 0 5px 5px; }";
 33             scrollStyle += ".scroll .scroll_up:hover{background-position:0px -11px ; }";
 34             scrollStyle += ".scroll .scroll_down:hover{background-position:0px -31px ; }";
 35             scrollStyle += ".scroll .scroll_cen { height:" + (text_hidden - parameter.updownH * 2) + "px; background-color: #777676; position: relative; }";
 36             scrollStyle += ".scroll .scroll_cen .scroll_button { width:" + (parameter.sWidth - 2) + "px; margin: 0px 1px; background:url(img/tiao.jpg) repeat-y 0 0; border-radius: 5px; position: absolute; cursor: pointer; }";
 37             $("head").append("<style type='text/css'>" + scrollStyle + "</style>");
 38 
 39             //變數聲明
 40             var text_show = $(celem).height(), scroll_b = $(".leonabutton" + index + ""), text_p = text_hidden / text_show, bH_max = $(".leonas" + index + " .leonacen" + index + "").height(), bH = text_p * bH_max;
 41             if (parameter.scrollbar == true || parameter.scrollbar === undefined) {
 42                 if (text_p >= 1) $(".leonas" + index + "").css("display", "none"); else { $(".leonas" + index + "").css("display", "block"); scroll_b.css("height", bH + "px"); }
 43             } else return;
 44 
 45 
 46             //滑鼠拖動div事件
 47             var needMove = false, mouseY = 0;
 48             scroll_b.mousedown(function (event) { needMove = true; var bH_Top = scroll_b.position().top; mouseY = event.pageY - bH_Top; });
 49             $(document).mouseup(function (event) { needMove = false; });
 50             $(document).mousemove(function (event) {
 51                 if (needMove) {
 52                     var sMouseY = event.pageY, bH_Top = sMouseY - mouseY, textY = bH_Top / bH_max * text_show;
 53                     if (bH_Top <= 0) {
 54                         scroll_b.css("top", 0);
 55                         $(celem).css("top", 0);
 56                         return;
 57                     }
 58                     if (bH_Top >= bH_max - bH) {
 59                         scroll_b.css("top", bH_max - bH);
 60                         $(celem).css("top", text_hidden - text_show);
 61                         return;
 62                     }
 63                     scroll_b.css("top", bH_Top); $(celem).css("top", -textY);
 64                 }
 65                 return;
 66             });
 67 
 68             //定義上下滾動規則
 69             function goGun(direction, timer) {
 70                 bH_Top = scroll_b.position().top;
 71                 var h = 0; h += parameter.speed;  //調節滑動速度
 72                 if (direction == 1) { //up
 73                     var Toping = bH_Top - h;
 74                     if (bH_Top <= 0 || Toping <= 0) {
 75                         scroll_b.css("top", 0); $(celem).css("top", 0);
 76                         if (timer == 2) clearInterval(goThread);   //need timer
 77                         return;
 78                     }
 79                     scroll_b.css("top", bH_Top - h);
 80                 };
 81                 if (direction == -1) { //down
 82                     var Downing = bH_Top + h;
 83                     if (bH_Top >= bH_max - bH || Downing >= bH_max - bH) {
 84                         scroll_b.css("top", bH_max - bH);
 85                         $(celem).css("top", text_hidden - text_show);
 86                         if (timer == 2) clearInterval(goThread);   //need timer
 87                         return;
 88                     }
 89                     scroll_b.css("top", bH_Top + h);
 90                 }
 91                 var textY = bH_Top / bH_max * text_show;
 92                 $(celem).css("top", -textY);
 93             };
 94 
 95             //上下微調按鈕事件
 96             function minTiao(minTB, d, t) {
 97                 var goThread = "";
 98                 minTB.mouseup(function () { clearInterval(goThread); });
 99                 minTB.mousedown(function () {
100                     clearInterval(goThread);
101                     goThread = setInterval(function () { goGun(d, t); }, 300);
102                 });
103                 minTB.click(function () { goGun(d); });
104             };
105             minTiao($(".leonaup" + index + ""), 1, 2);//up
106             minTiao($(".leonadown" + index + ""), -1, 2);//down
107 
108             //滾輪事件
109             if (text_p < 1) {
110                 $(elem).bind("mousewheel", function (event, delta, deltaX, deltaY) {
111                     if (delta == 1) {//up
112                         goGun(1, 0);
113                         if (scroll_b.position().top != 0)
114                             return false;
115                     } if (delta == -1) {//down
116                         goGun(-1, 0);
117                         if (Math.ceil(scroll_b.position().top) != Math.ceil(bH_max - bH))
118                             return false;
119                     }
120                 });
121             }
122 
123         });
124     }
125 });

 

下載地址鏈接:http://share.weiyun.com/2907af31e6427b83f7394014a62ca483 (密碼:EBBF)【leonaScroll-1.1】

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.列表解析。 (1)這是一個,讓人聽起來十分欣喜的術語,代表著你可以通過一個迴圈將所有值放到一個列表中。python列表解析屬於python的迭代中的一種,相比python for迴圈速度會快很多。下麵看下python列表解析是怎麼工作的: 註:python會在解釋器里對range(10)進行迭代 ...
  • 題目: 在一個2^k x 2^k 個方格組成的棋盤中,若恰有一個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。現在要用4種不同形態的L型骨牌覆蓋一個給定的特殊棋盤上除特殊方格以外的所有方格,且任意2個L型骨牌不得重疊覆蓋。 解釋一下什麼是L型骨牌:就是由三個方格組成的一個角,可 ...
  • Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2- ...
  • 1.字典。 字典是python中的映射的數據類型,由鍵值對構成,幾乎所有類型的python對象都可以用作鍵,不過一般還是以數字或是字元串最為常見。值可以是任意類型的python對象,字典元素用{}來包裹。 (1)要註意“鍵值對”的相關概念。 假設字典為dics = {0:'a', 1:'b', 'c ...
  • 一.預備知識 最近開始嘗試做一些tornado商城項目,在開始之前需要引入一些項目設計知識,如介面,抽象方法抽象類,組合,程式設計原則等,個人理解項目的合理設計可增加其靈活性,降低數據之間的耦合性,提高穩定性,下麵介紹一些預備知識 1.介面 其實py中沒有介面這個概念。要想實現介面的功能,可以通過主 ...
  • 在進行列表排序時,有個“上移”和“下移”操作,這個一般在記憶體里完成,然後統一提交到資料庫中,對於上移與下移的設計,大叔在LIND.DDD.DOMAIN里有一個ISortBehavor介面,主要是說,如果實體對象支持排序功能,可以實現這個介面,而在擴展庫中,將有為本地結果集動態排序(上移和下移)的方法 ...
  • 架構目標 業務系統 架構設計原則 應用架構 基礎架構 資料庫架構 分散式資料庫特性 • 支持MySQL,MariaDB,MongoDB等資料庫 • 服務高可用,主庫故障,從庫自動切換 • 數據高可靠,定期快照備份,增量備份 • 數據自動拆分,一鍵無縫遷移擴容 • 針對特殊業務需求,定製優化特殊的數據... ...
  • 職責鏈模式(Chain of responsibility),就是使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關係。通過職責鏈模式,簡單地使用JavaScript模擬了冒泡事件。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...