早期 Web 控件的尝试

简介: 选项卡,又称“标签页”,英文中有统一名称,谓之 Tab。Tab 是一种常见的控件,能够有效地利用空间而广泛使用。在线预览:http://naturaljs.googlecode.com/svn/trunk/demo/widgets/tab.html开发过程中遇到的问题。

选项卡,又称“标签页”,英文中有统一名称,谓之 Tab。Tab 是一种常见的控件,能够有效地利用空间而广泛使用。

在线预览:http://naturaljs.googlecode.com/svn/trunk/demo/widgets/tab.html

开发过程中遇到的问题。

  • IE 事件对象没有 e.target,而是 srcELmenent 取而代之,故:
    var el  = e.target || e.srcElement;
  • IE 事件对象没有 e.currentTarget 登记事件的那个元素,也没有相应的属性值,故在登记事件处理器的时候 委托 元素 在第二个参数中:
    el.onClk(onTabChooserPressHandler.delegate(null, el));
    ……    
    function onTabChooserPressHandler(e, _container){
            // 搜索 el 下的 li 元素,到容器为止
            var el             = e.target || e.srcElement, 
                container    = e.currentTarget || _container; 
    
  • IE8 元素虽有子元素集合 children,但有 bug, 把注释元素都算进去了,故修正如下。
    var el  = e.target || e.srcElement;
  • IE 中,事件对象可以用不同的方式进行访问。当一个事件 Handler 通过 DOM 0 级的方式被授权,则这个事件对象将作为 window 对象的属性而存在,看下面的例子,
      var btn = document.getElementById('mybtn');
    
      btn.onclick = function(){
    
        var event = window.event;
    
        alert(event.type);//"click"
    
      } 
      此时,event 对象来源于 window.event 对象,并且之后又用于确定事件类型。然而,当 eventHandler 通过 attachEvent()这种方式来授权的话,event 对象将作为 function 的唯一参数,请看如下代码  
    var btn = document.getElementById(“myBtn”);
    btn.attachEvent(“onclick”, function(event){
       alert(event.type); //”click”
    });
      当使用attachEvent() 方法时,事件对象同时也可以在window对象上进行访问,和dom 0级的实现方式一样,并且事件对象同样被传进来作为一个参数。  如果event Handler 是通过HTML属性被授权的,event是作为一个一个变量被访问的,叫做event。例如
    <input type=”button” value=”Click Me” onclick=”alert(event.type)”>
    参考:http://www.cnblogs.com/MrBackKom/archive/2012/06/24/2559681.html

如果候选栏出现下面的错位,那么请在 Tab 容器前面加入一个换行符 <br />。


		<br />
		<div class="tabContainer tab2">
			<ul>
				<li class="selected">车主简介</li>
				<li>车辆图片</li>
				<li>资质证照</li>
			</ul>
                ....

因为 tabs 是一个 DOM 队列,所以必须保证队列间不能插入非 tab 标签,即使 <script><style> 也不行,否则会渲染出错。

DHTML回头看:一步一步之浏览器的 scroller 滚动

首先说说怎么让浏览器出现滚动条?最普遍的一种的描述是,内容足够长的话,浏览器便会自动出现滚动条,也就是说,内容长度与容器长度是有密切关系的,一旦容器高度小于实际内容长度(高度)的时候,浏览器应该出现滚动条,以便让用户翻滚内容,——无论是 X 方向抑或 Y 的方向。控制容器高度,可以是通过拖放容器控件来决定,也就是 resize  事件;另外一种便是写死容器的高度,譬如某个 DIV,我定义其 height : 200px 高度,而实际内容超出 200px, 很自然要出现滚动条。滚动条是一旦内容超长的话便会出现的——如果要控制滚动条不出现这样需求的需求怎么办?很简单,就是让 overflow 样式属性为 hidden ,表示绝对禁止滚动条出现。如果 overflow 为 auto,表示内容不长的话便不出现滚动条,长了就出现。 

用户自己控制滚动条是最普遍的情形,那么,我说,我们程序员写代码来控制滚动条移动是否可以?答案当然是可以。接下来介绍的这个 scrollTop/scrollLeft 属性便是办这件事情的。它们一个是向下方滚动,另外一个是向右滚动,可以说当搞清楚了 Top 方向自然晓得 Left 方向。为方便咱叙述,咱挑一个 scrollTop 说就行。scrollTop 是关于可见内容与其容器最顶端之间的距离,它是可读可写的属性,接受类型为Number,怎么理解这个“可读可写”?当读取 scroll 的时候,就是获取当前距离是多少;对 scrollTop 写入的时候,就是设置内容进行“滚动”,滚动多少便是数值的大小。scrollTop 初识值是 0,极值是所处容器的高度,步进值就是咱赋予 scrollTop 的值,一次移动多少,那么这时候就是写入 scrollTop 的时候。如果 el.scrollTop = 10 就是“滚动”到刻度为10的那个位置上,测试一下这个例子 1.1:

http://naturaljs.googlecode.com/svn/static/dhtml/scroller/1.htm

看到滚动条有变化了吧?第一个例子通常比较简单的,以便顺利入门:我们只是在 onClick 事件中写了一句:

document.getElementById('Test_1').scrollTop = 10;
意思是滚动的幅度为10像素。因为 scrollTop 初始值是 0,所以可以直接使用 += 运算符,这样的话,多次按下按钮的作用就是进行连续滚动,请见例子 1.2:

http://naturaljs.googlecode.com/svn/static/dhtml/scroller/1.htm

如当前我们制定步幅为20那样,第一次滚动20个像素,再按一次,40,第三次就是60……到了极值之后再按都不会滚动了。

作为笔者的我也不得不表示,毫无难度。

/**
 * 固定位置元素(简单版)。
 */
function simpleCouplet(el) {
	var el = document.getElementById(el);	// 	获取元素
   
	setInterval(function() {
		el.style.top = (document.body.scrollTop + 50) + 'px';
	}, 2);
}

/**
 * Couplet that moves with the screen scroll.
 * @argument {String} el The id of element
 */
couplet = function(_el){
    var moveFn = function(){
        //'arguments.callee.count' remembers how many times this ay-Fn has been called. 
        if (!arguments.callee.count) {
            arguments.callee.count = 0;
        }
        var _percent = 0.1 * (document.documentElement.scrollTop - arguments.callee.count);
        var percent = _percent > 0 ? Math.ceil(_percent) : Math.floor(_percent);
        this.setTop(this.getTop() + percent);
        arguments.callee.count += percent;
    };
    //todo try to use "window.onscroll"
    setInterval(moveFn.createDelegate(Ext.get(_el).setStyle('position', 'absolute')), 2);
};
目录
相关文章
|
开发者 Java Spring
JSF 牵手社交登录,如魔法风暴席卷 Web 世界,开启震撼便捷登录之旅!
【8月更文挑战第31天】在互联网时代,便捷登录成为用户的核心需求。社交登录凭借其便捷性、安全性和社交化的特点,在各类Web应用中广泛应用。JavaServer Faces(JSF),作为一款流行的Java Web框架,能够轻松集成社交登录功能,显著提升用户体验。本文详细介绍社交登录的优势,并提供两种JSF集成社交登录的常见方法:一是利用Spring Social等第三方库简化开发;二是自行实现社交登录流程。开发者可根据项目需求选择适合的方案。
138 0
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
229 0
|
数据采集 前端开发 开发者
Angular表单控件详解:掌握模板驱动与响应式表单的精髓,让Web应用中的数据采集工作变得高效又简单,彻底告别繁琐的表单处理流程
【8月更文挑战第31天】表单是 Web 应用的关键组件,用于用户登录、注册及信息提交。Angular 作为成熟前端框架,提供了强大的表单处理功能,包括模板驱动与响应式表单。本文通过技术博客形式,详细介绍这两种表单控件,并提供示例代码,展示如何利用它们简化表单处理流程,提高开发效率。首先介绍简单的模板驱动表单,然后讲解基于 RxJS 的响应式表单,适用于复杂逻辑。通过本文,你将学会如何高效地使用 Angular 表单控件,提升应用的用户体验。
158 0
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类
|
SQL 存储 C#
C# Web控件与数据感应之 TreeView 类
C# Web控件与数据感应之 TreeView 类
|
SQL 存储 Oracle
C# Web控件与数据感应之 CheckBoxList 类
C# Web控件与数据感应之 CheckBoxList 类
|
SQL 存储 Oracle
C# Web控件与数据感应之 ListControl 类
C# Web控件与数据感应之 ListControl 类
|
人工智能 前端开发 Java
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
142 0
|
Web App开发 开发框架 JavaScript

热门文章

最新文章