`
laolinshi
  • 浏览: 41451 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JS分页代码引起浏览器死机分析

 
阅读更多

      Android平台的webview中显示文字内容时,由于Android浏览器不支持原生态的滚动条,当需要显示的内容超出页面的范围时,多余的内容会被截掉,导致内容显示不完全。

 

     于是,实现了一个JS方法,可以根据显示DIV的尺寸对文字进行分页处理,每次只显示一页,通过左右键进行页面切换,这样就可以避免上述的问题。具体的实现逻辑如下:

var curPageText = "";//当前页显示的内容
var curPage = 1;//当前页数
var curPageTextHeight = lineHeight;//当前页占用的高度
var chinessStrWidth = 0; //中文字符在页面中占用的宽度
var curLineWidth = 0;//当前行占用的宽度
var preStr = "";
var curStr = "";
for(var i=0;i<str.length;i++){  
    if(curPageTextHeight <= div_height){//判断当前页面占用的高度是否超过DIV高度  
       preStr = curStr;  
       curStr = str.substring(i,i+1);  
       if(preStr == "\r" && curStr == "\n"){//判断是否是回车换行符  
            curPageTextHeight += lineHeight;  
            curLineWidth = 0;  
            curPageText =   curPageText.substring(0,curPageText.length-1);  
            curPageText += "<br/>";  
            continue;  
       }else{  
            var curStrWidth = calTextWidth(fontsize,fontname,curStr);//计算每个字符在页面中需要占用的宽度  
            curLineWidth += curStrWidth;  
       }  
                  
       if(curLineWidth > div_width){//判断当前行的宽度是否超过DIV的宽度  
            curPageTextHeight += lineHeight;  
            curLineWidth = 0;  
            curPageText += "<br/>";  
            i--;  
       }else{  
            curPageText += curStr;  
       }  
   }else{  
       //对获得页面数据进行处理  
       curPageText = "";  
       curPage++;  
       curPageTextHeight = lineHeight;  
       i--;  
   }  
}  
       这段代码在IE,firefox运行正常,而在chrome中却死机了。查看了一些资料,发现可能的原因是脚本运算量太大,响应缓慢,浏览器线程直接死掉了,导视页面无法响应。
       这时候,想到了chrome浏览器是支持HTML5,可以采用HTML5中的Web Workers,它的主要功是生成一个单独的进程,在浏览器执行范围外执行繁重的方法,而不会影响到页面UI的渲染和交互。所以,可以把上面的分页逻辑封装在一个独立的JS文件中,采用Web Workers机制执行这个JS文件,传入显示内容的DIV的高度,宽度,文字显示的字体和大小等,在WebWorkers中计算出每页可以显示的字数,总共可以分成几页。等这里逻辑处理完成之后,WebWorders线程可以采用消息机制通知浏览器线程分页已处理完毕,浏览器线程就可以把分页后的数据显示在页面元素中,代码如下:
var onmessage = function(event){
        //浏览器线程中传入的各种参数
	var str = event.data.content;
	var divWidth = event.data.divWidth;
	var divHeight = event.data.divHeight;
	var fontsize = event.data.fontSize;
	var fontname = event.data.fontName;
	var lineHeight = event.data.lineHeigth;
	var labelId = event.data.labelId;
	var personIndex = event.data.personIndex;
	
	//上面列出的具体的分页处理逻辑,pageArray包含每页的分页数据
        
       var result = new Object();
       result.page = pageArray;
       result.labelId = labelId;
       result.personIndex = personIndex;
       postMessage(result);//通知浏览器线程分页已经处理完毕,把分页结果传给浏览器线程
};
       浏览器进程接收到分页数据,就可以在页面中显示了。
分享到:
评论

相关推荐

    适配所有浏览器的js分页插件

    本项目提供的“适配所有浏览器的js分页插件”是一个轻量级且易用的解决方案,尤其适用于那些需要在不同浏览器上保持一致性的项目。这个插件设计的核心目标就是兼容性,确保在各大主流浏览器(如Chrome、Firefox、...

    js分页代码,分页代码

    ### 四、示例代码分析 #### 1. **样式设置** - 代码中包含了一些CSS样式设置,如字体大小、字体类型等,用于美化页面布局。 #### 2. **内容定义** - 定义了一个字符串`s`,其中包含了要分页显示的内容。 - 这里...

    经典的10种JS分页代码

    这篇内容将详细介绍10种经典的JS分页代码实现方法,帮助开发者理解和应用这些技术。 1. **基础HTML和CSS分页**:最简单的分页实现,通常结合HTML链接和CSS样式来创建分页条目。开发者需要计算总页数,然后创建相应...

    分页代码 分页代码 分页代码

    分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码分页代码...

    JS+HTML分页代码

    本示例提供的"JS+HTML分页代码"是一个利用JavaScript(JS)和超文本标记语言(HTML)实现的分页功能,主要包含了首页、前页、后页、尾页以及自定义分页页号的功能。 **HTML基础**: HTML是网页的基础,用于构建页面...

    10种JS分页代码!,喜欢的来拿了

    JavaScript(简称JS)是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,特别是在客户端渲染的应用中...无论是学习基础的JavaScript编程,还是提升Web开发技能,这10种JS分页代码都是一份宝贵的学习资源。

    Javascript分页效果(收集了很多强大的JS分页代码)

    这个压缩包中包含了多个JavaScript分页代码示例,适合网页开发者参考和直接应用。 分页效果的实现通常包括以下几个核心部分: 1. 数据获取:首先,需要获取要分页展示的数据。这些数据可以来源于服务器端(如通过...

    纯JS长文章分页代码

    #### 示例代码分析 - **变量初始化**: ```javascript var Text = xmlArticle.selectSingleNode("//Content").text; TotalByte = Text.length; ``` 这里首先从 XML 数据中获取文章内容,并计算出总的字节数。 ...

    10种漂亮JS网站分页代码

    JavaScript(简称JS)是一种广泛用于网页和网络应用的编程语言,尤其在网页动态效果和交互性方面发挥着重要作用。在网站开发中,分页是一种常见的功能,它帮助用户浏览大量数据,如博客文章、产品列表等,而不会一次...

    PHP内容分页.新闻内容分页代码,分页代码

    PHP内容分页,新闻内容分页代码,分页代码

    10经典常用的js分页代码(开发必备)

    "10经典常用的js分页代码(开发必备)"这个资源集合了十个在实际开发中广泛使用的JavaScript分页实现方案。 1. **基础概念**:分页通常涉及到数据的动态加载,通过将大量数据分成若干页,每次只显示一部分,用户可以...

    10种JavaScript分页代码.rar

    编写JavaScript分页代码时要考虑浏览器兼容性,尤其是对于老旧浏览器。同时,注意优化性能,避免不必要的DOM操作和重复计算。 10. 设计模式和库: 除了自定义分页逻辑,还可以利用现有的分页库,如jQuery分页插件...

    js table设置表格行tr分页代码简单的分页代码下载

    在JavaScript(JS)中,处理表格(table)的分页是一项常见的任务,特别是在网页应用中,当数据量较大时,为了提高用户体验,我们会选择将数据分页显示。本篇文章将详细探讨如何使用JavaScript来实现表格行(tr)的...

    10种JavaScript分页代码

    最后,为了更好地理解和学习这些分页代码,可以逐个打开压缩包内的文件,在浏览器环境中运行并查看源代码,理解它们的工作原理。同时,也可以参考网络上的其他教程和最佳实践,将所学知识应用到自己的项目中,提升...

    经典JavaScript分页代码

    这个经典JavaScript分页代码实现了一个名为`Page`的类,用于处理分页逻辑。下面将详细解析这个代码中的关键知识点。 1. **类定义与构造函数**: 类`Page`通过构造函数接收三个参数:`iAbsolute`(每页显示记录数)...

    分页js文件

    在这个主题中,我们将深入探讨"分页js"的相关知识点,包括分页的基本原理、JavaScript实现分页的方法、以及如何结合CSS(如`pageNav.css`)优化分页的样式。 首先,我们要理解分页的基本概念。分页通常用于显示...

    js分页示例,前台分页,客户端分页,分页机制,js分页

    本篇将深入探讨JavaScript实现分页的相关知识点,包括前台分页、客户端分页、分页机制以及相关的JavaScript代码示例。 首先,我们要理解什么是分页。在Web应用中,分页是将大量数据分成多个小部分(每部分通常称为...

    分页代码 重分页代码

    在这个场景中,"分页代码 重分页代码" 指的是在SSH框架下实现分页功能的代码,并且强调了代码的复用性,即在一个工程中只需要一个公共的分页类。 分页的目的是为了提高用户体验,避免一次性加载大量数据导致页面...

    10种JS分页代码

    7. **兼容性处理**:考虑不同浏览器对JS的支持程度,可能需要使用条件注释或polyfill来确保代码在老版本浏览器中也能正常工作。 8. **性能优化**:通过缓存已加载的数据、避免不必要的重绘和回流,提升分页操作的...

    jquery分页程序,js分页代码

    **jQuery分页程序和JavaScript分页代码详解** 在网页开发中,当数据量过大时,为了提高用户体验,通常会采用分页技术来展示数据。本篇文章将深入探讨JavaScript(JS)和jQuery实现分页的原理与方法。 首先,我们要...

Global site tag (gtag.js) - Google Analytics