自定義滾動條(鍵盤,滾輪,滑鼠,三種控制方式)

来源:http://www.cnblogs.com/niuniudashijie/archive/2016/12/07/6142728.html
-Advertisement-
Play Games

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } #wrap { position: absolute; ...


<!DOCTYPE html>

<html>

 

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

* {

margin: 0;

padding: 0;

}

 

#wrap {

position: absolute;

top: 100px;

left: 50%;

margin-left: -150px;

width: 295px;

height: 400px;

border: 1px #ccc solid;

border-radius: 10px;

overflow: hidden;

}

 

#middle {

position: absolute;

padding: 10px 20px 10px 10px;

font-size: 16px;

line-height: 20px;

}

 

#sliderWrap {

position: absolute;

top: 0;

right: 0;

height: 100%;

width: 20px;

background: #ccc;

border-radius: 10px;

}

 

#slider {

position: absolute;

width: 20px;

background: #7B68EE;

border-radius: 10px;

cursor: pointer;

}

</style>

</head>

 

<body>

<div id="wrap">

<p id="middle">隨著數字革命逐漸滲透到人們日常生活中方方面面,它也開始滲入到我們的語言以及我們對事物工作機制最基本的看法里。科技做的就是這樣的事情。在啟蒙運動時期,牛頓和笛卡爾鼓勵人們將宇宙想象成一個精美的鐘錶。到了工業時代,激起人們新認知的是帶活塞的機器。到了今天,電腦開始從根本上改變人的認知。如果世界是一臺電腦,那麼這個世界就是可以被編程的。<br/>代碼具有邏輯的,代碼是可以被控制的,代碼就是命運。這些理念是數字時代生活的核心原則。隨著軟體逐漸吞噬著整個世界,就好比著名的風險資本家 Marc Andreessen 之前說過的那樣,我們現在正生活在機器的海洋里,機器將我們的行為、想法和情緒轉變成了數據,數據則是用來給工程師進行編碼操控的原材料。我們現在已經將生活看成了一種被一系列指令控制的有規則的東西,這些指令可以被髮現、利用、優化甚至重寫。公司用代碼來理解我們最密切的聯繫,Facebook 的 Mark Zuckerberg甚至猜想在人類關係里可能存在一種基本的數學定律,這個定律控制著我們所關心的人和事的平衡。2013年,著名的基因科學家 Craig Venter 曾宣稱,在人類基因組解碼的 10年後,他就已經開始編寫能夠讓他創造合成生物的代碼了。“在這個星球上,我們知道的所有活細胞都是 DNA 軟體驅動的生物機器。”甚至一些自助文學也闡明這樣了這樣一個觀點,即你是可以控制自己的源代碼的,你可以對你的戀愛生活、睡眠習慣和消費習慣重新進行編程。<br/>在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”在如今的這個世界上,編程的能力已不僅僅是一個理想的技能,它已經成為了一種語言。懂得這門語言,意味著你就獲得了權利杠桿。未來學家 Marc Goodman 曾這樣說過:“如果你控制了代碼,你就控制了整個世界。” 相比之下,Paul Ford 的用詞稍微委婉一些:“即使控制代碼的人沒能控制世界,他們也控制了可以控制世界的東西。”</p>

<div id="sliderWrap">

<div id="slider"></div>

</div>

</div>

</body>

<script type="text/javascript" src="js/mouse.js">

 

</script>

<script>

var wrap = document.getElementById("wrap");

var middle = document.getElementById("middle");

var sliderWrap = document.getElementById("sliderWrap");

var slider = document.getElementById("slider");

//代表slider的偏移量

var y = 0;

 

//第一步 指定滾動條的高度

function sliderHeight() {

var scale = wrap.clientHeight / middle.clientHeight;

var height = sliderWrap.clientHeight * scale;

slider.style.height = height + "px";

}

sliderHeight();

 

//獲取slider的最大偏移量

var maxSliderHeight = sliderWrap.clientHeight - slider.clientHeight;

//獲取文本的最大偏移量

var maxMiddleHeight = middle.clientHeight - wrap.clientHeight;

 

//封裝一個移動方法

function move() {

if(y <= 0) {

y = 0;

}

if(y >= maxSliderHeight) {

y = maxSliderHeight

}

var scaleY = y / maxSliderHeight;

slider.style.top = y + "px";

middle.style.top = -(scaleY * maxMiddleHeight) + "px";

}

//滑動

slider.onmousedown = function(event) {

var ev = event || window.event;

var disY = ev.clientY - slider.offsetTop;

document.onmousemove = function(event) {

var ev = event || window.event;

y = ev.clientY - disY;

move();

}

document.onmouseup = function() {

document.onmousemove = null;

}

return false;

}

//鍵盤事件,上下鍵控制slider的移動

document.onkeydown = function(event) {

var ev = event || window.event;

//根據鍵盤的鍵位,決定到底是往下走還是往上走

switch (ev.keyCode){

case 38:

y -= 5;

break;

case 40:

y += 5;

break;

default:

break;

}

move();

}

//為sliderWrap賦點擊事件

sliderWrap.onmousedown = function(event) {

var ev = event || window.event;

//y 等於 多少呢?

//當前點擊的縱向位置 - wrap的top值 - slider自身高度的一半

y = ev.clientY - wrap.offsetTop - slider.clientHeight / 2;

move();

}

 

//滾輪控制滾動條的滾動

function sliderMove(event, down) {

if (down) {

y += 5;

} else {

y -= 5;

}

move();

}

mouseWheel(wrap, sliderMove);

 

</script>

 

</html>

 

 

mouse.js部分

function mouseWheel(obj, fn) {

//嗅探

var ff = navigator.userAgent.indexOf("Firefox");

if(ff != -1) {

obj.addEventListener("DOMMouseScroll", wheel, false);

} else {

obj.onmousewheel = wheel;

}

 

function wheel(event) {

var ev = event || window.event;

//滾輪往下滾是true

var down = true;

if(ev.detail) {

down = ev.detail > 0

} else {

down = ev.wheelDelta < 0;

}

//通過down來執行相應的代碼

 

//讓fn執行,並且讓ev和down作為參數傳進去

fn(ev, down); //函數調用

}

}


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

-Advertisement-
Play Games
更多相關文章
  • 最近因公司項目原因,去了趟昆明出差,其中第一次接觸安裝redis,配置sentinel,學習到不少,但也都是皮毛而已,本隨筆記下所學知識。 1、首先介紹下redis,來源自百度百科 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括stri ...
  • 剛學了js的一些函數,所以做了一個太極的旋轉。做完之後是上面這個樣子的,是可以旋轉的。 思路: 1.先做一個基準轉盤,之後將元素都放在轉盤上,跟隨轉盤動。 2.畫兩個半圓,主要屬性是border-top-right-radius: 250px; 像素值為長邊的一半。 3.然後畫4個圓,以基準轉盤為父 ...
  • JavaScript組成: ECMAscript 瀏覽器對象模型 BOM 文檔對象模型 DOM // ecmascript bom dom dom (文檔對象模型) 用來訪問和操縱html文檔 bom (瀏覽器對象模型) js 是瀏覽器語言 JavaScript引入: 1 <script src=“ ...
  • 背景(background)是css中很重要的一部分,也是css的基礎知道之一,現在來回顧css2中5個屬性與css3中新增的3個屬性和2個功能。 CSS2_背景(background)前傳 家族成員 背景(background)家族在css2中由5個主要的背景屬性組成,分別是: 想知道家族五大成員 ...
  • 背景: 自從今年下半年接觸一個基於ReactJS 的手機APP項目。開始瞭解到了Corodva這個神奇的東西。後續自己也自作了一些小的APP放到了應用寶上。8月份開始想做一個博客園APP。於是就私聊博客園團隊申請了博客園API訪問許可權(當然其實應用寶裡面也有博客園APP了。而且用fiddler抓取了 ...
  • 類定義 ES6完整學習阮老師的ECMAScript6入門。 技術一般水平有限,有什麼錯的地方,望大家指正。 以前我們使用ES5標准定義一個構造函數的過程如下: 通常首字母大寫的函數我們稱為構造函數(並不是一種語法約束,只是一種約定俗成的規律),屬性寫在方法裡面,函數寫在原型上面,這樣實例化(new操 ...
  • 1.ECMAScript數據類型 5種簡單數據類型,分別是: Undefined Null Boolean Number String 1種複雜數據類型: Object (1)typeof操作符——檢測給定變數的數據類型 “undefined”——未定義 “booleam”——布爾值 “string ...
  • 1.const聲明一個只讀常量,一旦聲明,常量的值就不能改變 2.const一旦聲明常量,就必須立即初始化,不能留到以後賦值 3.const聲明的常量只在當前作用域內有效 4.const聲明的常量不存在“聲明提前”,只能先聲明後使用 5.const不可重覆聲明 6.const聲明的常量如果保存的是引 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...