`
bellstar
  • 浏览: 150705 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js等待提示通用类

阅读更多
这是一个非常易用的widget,参数都有默认值,默认值参见注释
wait = new WaitingTip();
wait.show(document.getElementById('id')); //显示,参数1是参照对象
...
wait.hide(); //隐藏


使用示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  >
<head>
	<title>waiting tip</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     
	<script src="waitingTip.js"></script>
	<script>
	function bodyload(){
		var w1 = new WaitingTip({innerHTML:"<img src='images/w2.gif' />正在搜索..."});
		var txt1El = document.getElementById("txt1");
		w1.show(txt1El);

		var w2 = new WaitingTip({innerHTML:"<img src='images/waiting.gif' />正在载入..."});
		var div1El = document.getElementById("div1");
		w2.show(div1El,"center");

		var w3 = new WaitingTip({gap:10,innerHTML:"<img src='images/w2.gif' />正在搜索..."});
		var txt2El = document.getElementById("txt2");
		w3.show(txt2El,"right");
	}
	window.onload = bodyload;
	</script>
<body>
<ul>
	<li>
	等待动画默认在相对HTML元素的下方<br/>
		<input id="txt1" type="text" value="北京" />
	</li>
	<li>
		<div id="div1" style="margin:50px;width:200px;height:100px;border:1px solid black">
			等待动画在中间<br/>
		</div>
	</li>
	<li>
	等待动画在右边,且和相对HTML元素的距离为10px<br/>
		<input id="txt2" type="text" value="北京" />
	</li>
</ul>
</body>
</html>

运行效果

源码如下:
/**
 * @praam <String>containerElId=" ____waiting____随机数" 指定一个容器的id
 * @param <String>styleClassName 容器的css样式类
 * @param <String>innerHTML ="<img alt='running...' src='/images/waiting.gif' /> "  内容
 * @param <String>anchor ="down"  停放位置 ["down","up","left","right","center"];
 * @param <Number>gap =2与参照节点位置的间距
 */
function WaitingTip (options){
    if(!options){
             options = {
             containerElId: null,
             styleClassName: null,
             innerHTML:null,
             anchor:null,
             gap:null
      }
    }
    var id = options.containerElid ||" ____waiting" + Math.floor(Math.random() * 1000000);
    this.getWaitEl = function(){
        return document.getElementById(id);
    }
    
    var anchor = options.anchor ? options.anchor.toLowerCase() : "down" ;
    this.getAnchor = function(){
        return anchor;
    }
    
    var gap = options.gap || 2;
    this.getGap = function(){
        return gap;
    }
    
    var init = function(){
        var div = document.createElement("div") 
        div.id = id;
        div.style.position = "absolute";
        div.style.display = "none";
        if(options.styleClassName)div.className = styleClassName;            
        document.body.appendChild(div);
        if(options.innerHTML){
            div.innerHTML = options.innerHTML;
        }
        else{
            var waitingImg = document.createElement("img");
            waitingImg.src = "/images/waiting.gif";
            waitingImg.alt = "running...";
            div.appendChild(waitingImg);
        }
        searchingEl  = div;
    }
    init();
}

/**
 *获取某个HTML Element绝对位置
 *@private
 */
WaitingTip.prototype.GetAbsoluteLocation = function (element)
{
    if ( arguments.length != 1 || element == null )
    {
        return null;
    }
    var offsetTop = element.offsetTop;
    var offsetLeft = element.offsetLeft;
    var offsetWidth = element.offsetWidth;
    var offsetHeight = element.offsetHeight;
    while( element = element.offsetParent )
    {
        offsetTop += element.offsetTop;
        offsetLeft += element.offsetLeft;
    }
    return { absoluteTop: offsetTop, absoluteLeft: offsetLeft,
        offsetWidth: offsetWidth, offsetHeight: offsetHeight };
}
    
/**
 *隐藏
 *@public
 */
WaitingTip.prototype.hide = function(){
    this.getWaitEl().style.display = "none";
}    
    
    
/**
 *显示
 *@public
 *@param <String> relativelyElId 参照节点的id
 *@param <String>anchor  默认为初始化设置时值
 */
WaitingTip.prototype.show = function(relativelyEl,anchor){
    var p = this.GetAbsoluteLocation(relativelyEl);
    var waitEl = this.getWaitEl();
    var gap = this.getGap();
    var _anchor = anchor || this.getAnchor();
    waitEl.style.display = "block";
    switch(_anchor){
        case "down":
            waitEl.style.top = p.absoluteTop + p.offsetHeight + gap + "px";
            waitEl.style.left = p.absoluteLeft + "px";
            break;
        case "right":
            waitEl.style.top = p.absoluteTop + "px";
            waitEl.style.left = p.absoluteLeft + p.offsetWidth + gap +  "px";            
            break;
        case "left":
             waitElpos = this.GetAbsoluteLocation(waitEl);
            waitEl.style.top = p.absoluteTop + "px";
            waitEl.style.left = p.absoluteLeft - gap - waitElpos.offsetWidth +  "px";                        
            break;
        case "up":
             waitElpos = this.GetAbsoluteLocation(waitEl);
            waitEl.style.top = p.absoluteTop - gap -  waitElpos.offsetHeight +  "px";
            waitEl.style.left = p.absoluteLeft +  "px";             
            break;
        case "center":
            try{
               waitElpos = this.GetAbsoluteLocation(waitEl);
              waitEl.style.top = p.absoluteTop  + Math.floor((p.offsetHeight - waitElpos.offsetHeight)  / 2) +  "px";
              waitEl.style.left = p.absoluteLeft +  Math.floor((p.offsetWidth  - waitElpos.offsetWidth)  / 2) + "px";                      
            }
            catch(error){
                waitEl.style.top = p.absoluteTop  + Math.floor(p.offsetHeight  / 2) +  "px";
                waitEl.style.left = p.absoluteLeft +  Math.floor(p.offsetWidth   / 2) + "px";                      
            }
            break;
    }
}

  • 大小: 18.2 KB
分享到:
评论
2 楼 playfish 2009-09-13  
呵呵,楼主这个功能整理得还可以。就是代码感觉不够漂亮。:)
楼上说的不知道是不是处理这个loading响应的过程。。?过程,就是发起ajax请求的时候调用loading的启动,ajax请求成功的时候在回调函数里面调用loading的关闭
1 楼 641216927 2009-09-13  
谢谢!这是一个友好提示功能,但是有什么好解决方案获得服务端响应客户端,并完成响应处理数据?

相关推荐

    vue3 封装一个全局通用弹窗提示组件(利用js调用 类似于element)

    本篇文章将详细介绍如何利用Vue3的特性来封装一个类似于Element UI的全局通用弹窗提示组件,并通过JavaScript进行调用。 首先,我们需要了解Vue3中的Composition API。Vue3引入了Composition API,它允许我们在组件...

    JS加载等待效果

    JavaScript加载等待效果是一种常见的用户体验优化技术,特别是在网页内容动态加载或者需要进行大量计算时。它通过展示一个加载动画或进度条来告知用户页面正在处理数据,以减少用户的等待焦虑感,提升整体的交互体验...

    通用的JS表单验证

    "通用的JS表单验证"这个主题聚焦于如何利用JavaScript来确保用户在网页表单中输入的数据符合预设的规则,从而提高数据质量和用户体验。下面我们将深入探讨这个话题。 首先,表单验证是网页开发中的关键部分,它能...

    html信息提交提示框

    在这个例子中,`tsk-alert`是提示框的通用类,`tsk-alert-loading`是表示特定状态的类。`&lt;span&gt;`元素用于放置提示框的图标,而`&lt;p&gt;`元素则显示具体的提示信息。 接下来,CSS将用于定义提示框的外观。我们可以根据...

    validate 通用Ajax无刷新表单验证类

    "validate 通用Ajax无刷新表单验证类"就是针对这一需求设计的,旨在提供一个高效、便捷的解决方案,使得在用户填写表单时能够实时进行数据验证,无需等待页面刷新,极大地提高了用户体验。 Ajax(Asynchronous ...

    一个界面显示“等待”处理的共有类

    10. **代码复用**:创建一个通用的“等待”类或组件,可以提高代码的可重用性和维护性。 以上知识点都是在处理“等待”界面时可能涉及的技术和概念,它们可以帮助开发者构建更加健壮和用户友好的应用程序。在实际...

    通用进度条

    在实现通用进度条时,开发者通常会使用编程语言(如Java、C#、JavaScript)配合UI库或框架(如Qt、WinAPI、Android SDK、iOS SDK、React、Vue、Angular)中的相关组件。例如,对于Web应用,可以利用HTML5的`...

    加载数据等待代码包括图片

    在描述中提到的"加载等待js"是一种常见的实践,即使用JavaScript脚本来控制页面元素的状态,特别是在内容异步加载时。当页面资源正在后台加载时,通过展示一个“加载中”提示(例如一个旋转的加载图标)来告知用户...

    公共js判断,js控件

    在JavaScript编程中,公共js判断和js控件是构建高效、用户友好的Web应用程序的关键组成部分。这些工具通常用于实现各种验证功能,确保用户输入的数据符合预期格式和规则,从而提高用户体验并减少服务器端的压力。...

    021 大数据通用模版_大屏幕展屏(html源码).rar

    此压缩包中的"021 大数据通用模版"是一个专门用于大屏幕展屏的设计,这类展屏通常用于企业监控中心、数据中心或者会议报告等场合,通过大屏幕实时展示关键业务指标和数据分析结果。模板的设计通常需要考虑到屏幕尺寸...

    ajax实现输入提示的前台例子,可以结合我之前上传的例子

    `public.js`可能是一个公共的JavaScript库,包含了一些通用的函数,比如DOM操作、事件处理等,这些函数会被`autosuggest_debug.js`等其他脚本引用和使用。 在`contacts.txt`中,可能存储了一组预定义的联系人信息,...

    最简单通用加载效果

    在Web开发中,JavaScript库如jQuery或Vue.js提供了丰富的动画组件;在React Native这样的跨平台框架中,也有如react-native-loading-spinner-overlay等组件可供选择。 为了实现这些效果,我们需要理解事件驱动编程...

    umbraco二次开发通用控件

    带进度条的上传控件能够给用户带来更好的反馈体验,让用户知道文件上传的进度,而不是只能等待一个不确定的结果。这个控件可能使用了HTML5的File API,结合Ajax技术来实现异步上传,同时利用JavaScript或jQuery显示...

    javascript 通用loading动画效果实例代码

    标题中提到的知识点是关于如何使用JavaScript实现一个通用的加载动画效果,即在Web页面中,当用户执行如Ajax提交等耗时操作时,页面会展示一个加载中的动画提示用户正在加载数据或处理请求,提升用户体验。...

    基于AjaxP的通用查询

    5. **错误处理**:确保有适当的错误处理机制,如请求失败或服务器返回错误时,能给出用户友好的提示。 四、优化与注意事项 1. **缓存利用**:为了提高性能,可以考虑对某些查询结果进行缓存,避免重复请求。 2. *...

    js实现三级联动选择大学专业

    在这个“js实现三级联动选择大学专业”的项目中,数据来源是通过Scrapy爬虫从某高考网站获取的,这意味着我们首先需要处理这些数据。Scrapy是一个强大的Python爬虫框架,可以抓取网页内容并进行结构化处理。数据文件...

    网页弹出层加载提示框插件zeroModal

    "ZeroModal"是一款基于jQuery的轻量级弹出层插件,它以扁平化设计风格为特色,能够方便地创建模态对话框、操作提示框以及等待层。这款插件兼容AMD(异步模块定义)和CMD(通用模块定义)规范,同时也支持直接引入到...

    仿新浪的注册表单验证的实现JS及示例

    在本文中,我们将深入探讨如何实现一个仿新浪的注册表单验证功能,主要涉及JavaScript(JS)和相关验证技术。这个实例将帮助我们理解如何利用前端技术确保用户输入的数据符合预设规则,从而提高用户体验并减少服务器...

    通用AjaxPro 无刷新分页

    **通用AjaxPro无刷新分页技术详解** AjaxPro是一种基于.NET平台的JavaScript库,它使得在Web应用程序中实现异步无刷新更新变得简单易行。本文将深入探讨如何利用AjaxPro实现一个无刷新分页的功能,同时结合存储过程...

Global site tag (gtag.js) - Google Analytics