系统滚动条实现的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.mzph.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,…