系統滾動條實現的NUD控件Unusable版

昨天研究了一下系統滾動條,準備使用它來實現一個NumericUpDown控件,因為它可以帶來最正宗的微調按鈕外觀emteeth.gif,并說了一下可以使用viewport里的onScroll事件來獲取系統滾動條的上下點擊動作。

??? 同時昨天還說了onScroll事件的一個問題是,在點擊了滾動條的上下按鈕后,onScroll事件會被連續的觸發n次(n取[1,4])。我們發現這些連續事件都在一個很小的timespan里觸發的,也就在12ms以內。于是我們在onScroll事件中使用setTimeout來啟動一次有意義的數值變化,代碼如下,分支false用來判斷點擊的方向。

None.gifif?(?NumericUpDown.ScrollBegin?==?0?)
None.gif{??
None.gif????NumericUpDown.ScrollBegin?=?new?Date().getTime();
None.gif????NumericUpDown.ChangeNumeric.Element?=?elmt;
None.gif????window.setTimeout(NumericUpDown.ChangeNumeric,?12);
None.gif}
None.gifelse
None.gif{
None.gif????var?time?=?new?Date().getTime();
None.gif????if?(?NumericUpDown.ScrollDirection?==?0?)
None.gif????{
None.gif?????????var?scrollOffset?=?NumericUpDown.ScrollTopValue?-?elmt.scrollTop;
None.gif?????????NumericUpDown.ScrollDirection?=?scrollOffset?>?0???1?:?-1;?
None.gif?????????NumericUpDown.ScrollTopValue?=?elmt.scrollTop;?
None.gif????}
None.gif}

??? 控件使用一個DIV,一個SPAN和一個INPUT type='hidden'來實現,DIV的overflow-y設為scroll,SPAN用來顯示當前的數值,INPUT type='hidden'用來存放控件當前的數值。

None.gif????<div?tabindex="0"?Step="1"?Precision="0"?onscroll="NumericUpDown.DoScroll(this)"
None.gif?????????style
="cursor:?default;?border:?solid?1px?red;?overflow-y:?scroll;?width:?50;
None.gif?????????height:?expression(this.all.tags('SPAN')[0].offsetHeight);"
>
None.gif?????????<span?style="display:?block;?white-space:?nowrap;?text-indent:?2;">1span><input
None.gif?????????????
type="hidden"?id="Hidden1"?value="1"?/>div>

??? 初始化控件的時候,再動態添加兩個SPAN分別到默認SPAN的兩端,這是因為滾動條如果處在任何一個頂端(top或bottom)是不會觸發onScroll事件的,也就是說要把默認那個SPAN放到DIV的正中間,前后在分別有一個SPAN。
None.gif?elmt.Current?=?elmt.Input.value;
None.gif?var?current?=?parseInt(elmt.Current);
None.gif?var?step?=?parseInt(elmt.Step);
None.gif?var?previousSpan?=?NumericUpDown.CreateSpan();
None.gif?previousSpan.innerText?=?current?-?step;
None.gif?var?nextSpan?=?NumericUpDown.CreateSpan();
None.gif?nextSpan.innerText?=?current?+?step;
None.gif?var?currentSpan?=?elmt.all.tags('SPAN')[0];
None.gif?currentSpan.insertAdjacentElement('beforeBegin',?previousSpan);
None.gif?currentSpan.insertAdjacentElement('afterEnd',?nextSpan);
None.gif?NumericUpDown.ScrollTo.CurrentSpan?=?currentSpan;
None.gif?window.setTimeout(NumericUpDown.ScrollTo,?1);????????
None.gif?elmt.IsInitialized?=?true;
????
????控件NumericUpDown代碼為:?
ContractedBlock.gif<script?language="javascript">dot.gifscript>
????
??? 由于在這個頁面上注入代碼太麻煩了,就把demo放到這里了。雖然這個NumericUpDown自然的就可以支持鍵盤Up & Down和PageUp & PageDown,可是最后一個問題卻真的沒有招了,以至于我最終只能放棄這個嘗試了。看看demo,框里的數字有些抖動是吧?這是系統的默認行為,而且點擊的越快,抖的也越快,真的沒有辦法了emsad.gif

??? 所以完成了也只能叫做Unusable版...


? 本文轉自博客園鳥食軒的博客,原文鏈接:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原博主。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

react 中渲染html_如何在React中識別和解決浪費的渲染

react 中渲染htmlby Nayeem Reza通過Nayeem Reza 如何在React中識別和解決浪費的渲染 (How to identify and resolve wasted renders in React) So, recently I was thinking about performance profiling of a react app that I was working on, and suddenly thought to set…

php變量的數據類型

一、類型 標量類型: 布爾型 整型 浮點型 字符串 復合類型: 數組 對象 特殊類型: 資源 null 1. 布爾型 true false 以下值認為是false 其他值都認為是true; 布爾值false 整型值0 浮點的0 空字符串和字符串0 空數組 空對象(只適用于php4) 特殊類型null 2. 整型 正整數和負整…

[習題].FindControl()方法 與 PlaceHolder控件 #2(動態加入「子控件」的事件)

這是我的文章備份&#xff0c;有空請到我的網站走走&#xff0c; http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息&#xff0c;謝謝您。 http://www.dotblogs.com.tw/mis2000lab/archive/2011/07/26/placeholder_findcontrol_eventhandler.aspx [習題].Fi…

西雅圖治安_數據科學家對西雅圖住宿業務的分析

西雅圖治安介紹 (Introduction) Airbnb provides an online platform for hosts to accommodate guests with short-term lodging. Guests can search for lodging using filters such as lodging type, dates, location, and price, and can search for specific types of hom…

leetcode 1438. 絕對差不超過限制的最長連續子數組(滑動窗口+treemap)

給你一個整數數組 nums &#xff0c;和一個表示限制的整數 limit&#xff0c;請你返回最長連續子數組的長度&#xff0c;該子數組中的任意兩個元素之間的絕對差必須小于或者等于 limit 。 如果不存在滿足條件的子數組&#xff0c;則返回 0 。 示例 1&#xff1a; 輸入&#…

react-redux圖解_如何將React連接到Redux —圖解指南

react-redux圖解by Princiya由Princiya 如何將React連接到Redux —圖解指南 (How to connect React to Redux — a diagrammatic guide) This post is aimed at people who already know React and Redux. This will aid them in better understanding how things work under …

幾種機器學習算法的優缺點

1決策樹&#xff08;Decision Trees&#xff09;的優缺點 決策樹的優點&#xff1a; 一、 決策樹易于理解和解釋.人們在通過解釋后都有能力去理解決策樹所表達的意義。 二、 對于決策樹&#xff0c;數據的準備往往是簡單或者是不必要的.不需要預處理數據。…

【貪心】買賣股票的最佳時機含手續費

/** 貪心&#xff1a;每次選取更低的價格買入&#xff0c;遇到高于買入的價格就出售(此時不一定是最大收益)。* 使用buy表示買入股票的價格和手續費的和。遍歷數組&#xff0c;如果后面的股票價格加上手續費* 小于buy&#xff0c;說明有更低的買入價格更新buy。如…

本科畢設論文——基于Kinect的拖拉機防撞系統

基于Kinect的拖拉機防撞系統電子信息科學與技術專業學生 sukeysun 摘要&#xff1a;隨著智能車輛技術的發展&#xff0c;智能導航定位和實時車載監控等技術被更多的應用到日常生活照。在農業領域上&#xff0c;車輛自主感知道路環境并制定實時避障策略還存在不足&#xff0c;特…

排序算法Java代碼實現(二)—— 冒泡排序

本篇內容&#xff1a; 冒泡排序冒泡排序 算法思想&#xff1a; 冒泡排序的原理是&#xff1a;從左到右&#xff0c;相鄰元素進行比較。 每次比較一輪&#xff0c;就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。 代碼實現&#xff1a; /*** */ packag…

創意產品 分析_使用聯合分析來發展創意

創意產品 分析Advertising finds itself in a tenacious spot these days serving two masters: creativity and data.如今&#xff0c;廣告業處于一個頑強的位置&#xff0c;服務于兩個大師&#xff1a;創造力和數據。 On the one hand, it values creativity; and it’s not…

leetcode 劍指 Offer 05. 替換空格

請實現一個函數&#xff0c;把字符串 s 中的每個空格替換成"%20"。 示例 1&#xff1a; 輸入&#xff1a;s “We are happy.” 輸出&#xff1a;“We%20are%20happy.” 解題思路 一次遍歷&#xff0c;檢查空格&#xff0c;然后替換 代碼 class Solution {publ…

兩個富翁打賭_打賭您無法解決這個Google面試問題。

兩個富翁打賭by Kevin Ghadyani通過凱文加迪亞尼(Kevin Ghadyani) 打賭您無法解決這個Google面試問題。 (Bet you can’t solve this Google interview question.) 將棘手的問題分解為小塊。 (Breaking tough problems into small pieces.) I wanted to see someone else’s t…

vue.js 安裝

寫 一個小小的安裝步驟 踩坑過來的 點擊.然后安裝cnpm.再接著使用文章說明繼續安裝 # 全局安裝 vue-cli $ cnpm install --global vue-cli # 創建一個基于 webpack 模板的新項目 $ vue init webpack my-project這時候一路空格 選項.當遇到第一個讓你敲 Y/N 的時候 選擇Y …

Swift 的函數和閉包

函數的關鍵字是 func &#xff0c;函數定義的格式是&#xff1a; func funcName(para:paraType) -> returnType{// code } 復制代碼函數的參數標簽 其中參數的那部分的詳細結構是用小括號括起來&#xff0c;參數名&#xff0c;冒號&#xff0c;參數類型&#xff1a; (number…

pandas之表格樣式

在juoyter notebook中直接通過df輸出DataFrame時&#xff0c;顯示的樣式為表格樣式&#xff0c;通過sytle可對表格的樣式做一些定制&#xff0c;類似excel的條件格式。 df pd.DataFrame(np.random.rand(5,4),columns[A,B,C,D]) s df.style print(s,type(s)) #<pandas.io.f…

多層感知機 深度神經網絡_使用深度神經網絡和合同感知損失的能源產量預測...

多層感知機 深度神經網絡in collaboration with Hsu Chung Chuan, Lin Min Htoo, and Quah Jia Yong.與許忠傳&#xff0c;林敏濤和華佳勇合作。 1. Introduction1.簡介 Since the early 1990s, several countries, mostly in the European Union and North America, had sta…

ajax跨域

//遠程的地址1.通過header頭實現ajax跨域PHP文件的代碼$origin isset($_SERVER[HTTP_ORIGIN])? $_SERVER[HTTP_ORIGIN] : ; $allow_origin array(http://www.example.com, http://www.example2.com);if(in_array($origin, $allow_origin)){ header(Access-Control-Allow-Ori…

java線程并發庫之--線程同步工具CountDownLatch用法

CountDownLatch&#xff0c;一個同步輔助類&#xff0c;在完成一組正在其他線程中執行的操作之前&#xff0c;它允許一個或多個線程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 構造方法…

leetcode 766. 托普利茨矩陣

給你一個 m x n 的矩陣 matrix 。如果這個矩陣是托普利茨矩陣&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 如果矩陣上每一條由左上到右下的對角線上的元素都相同&#xff0c;那么這個矩陣是 托普利茨矩陣 。 輸入&#xff1a;matrix [[1,2,3,4],[5,1,…