如何避免层被其它对象挡住

Posted on

如何避免层被其它对象挡住

首页 新闻 论坛 问答 博客 招聘 更多 ▼

专栏 圈子 搜索

您还未登录 ! 我的应用 登录 注册

wangpingsx

永久域名 http://wangpingsx.javaeye.com/

在Eclipse中查看android 源代码的方法! | 写 treeItemrenderer 还是有点儿难度的

2009-09-14

如何避免层被其它对象挡住

关键字: div被底层的东西挡住 来自于:

http://www2.flash8.net/teach/3959.htm

我找了好多地方,只有这个文章的内容对我有帮助。

之前先列另一个文章出来:

  1. 避免Flash挡住Div层的方式:增加 ,另外增加
  2. select和flash挡住div,可以采取移除节点的方式防止挡住
  3. select和flash采用display:none的方式防止挡住
  4. 在select和flash上面加一层隐藏的iframe对象,因为iframe对象跟select和flash界面显示平级,然后把目标div放在iframe上面
  5. 如果是按钮、提交、图片按钮,采用 button 标签来取代input标签,其他一致

wmode="transparent" 不管用,要用 wmode 为opaque 要用下边文章中写的样子。

如何避免层被其它对象挡住 解决思路 : 根据挡隔对象的不同,解决办法也不同。 具体步骤 : 1.被Flash挡住。 设置Flash的wmode属性值 为opaque或transparent,代码示例:

2.被图片挡住。 这个估计是因为图片也放在层中,而图片所在层的Z轴索引值比该层大,所以被挡住,解决办法是更改该层的Z轴索引值至比图片层大。 代码示例:

1

2

3
3.被表单控件挡住 这个目前还没有完美的解决方法,一般都是在设计排版时就尽量避免这种情况,如果是万不得已,就在层经过表单控件时让表单控件隐藏,过后再让它显示: 代码示例:

z-index:1

4.当然还有用优先级别较高的控件来代替层的方法解决,但控件并非是每台机器上都有安装,而且控件的可定制性也差,在兼容性上也存在问题。 (1)hhctrl.ocx控件: (2)X-Scriptlet控件 (3) window.createPopup() 注意:用createPopup方法打开的Popup窗口需要IE5.5以上浏览器的支持。 特别提示 本例所给代码的运行效果分别如图1.3.17~图1.3.22所示。 图 1.3.17 层与Flash的优先级别控制 图 1.3.18 层与层间的优先级别控制 图1.3.19层与表单控件的优先级别控制 图 1.3.20 HHCtrl控件与其它控件的优先级测试 图1.3.21X-Scriptlet控件与其它控件的优先级别测试 图1.3.22 Popup窗口与其它控件的优先级别测试

特别说明

本例问题的解决方式需要根据实际情况而定,一般来说用前三种方法就可以了,除非必要,否则尽量不要用后面的三种方法。

总结:

 在网上可以找到一些代码,但有些代码只能在ie 下运行,到了firefox里就变了。

以下是一段例子,用z轴的方式来解决问题。但不适合我们的项目。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 利用pre这个标签可以将 其包起来的文字排版、格 式,原封不动的呈现出来 。算是相当好用的标签之 一。也就是说你输入的东 西被原封不动的输出,包 括你输入的空格之类的, 不用和等来表示空格或者 回车 
 利用pre这个标签可以将其包起来的文 字排版、格式,原封不动的 呈现出来。算是相当好用的标签之一。也 就是说你输入的东西被原封不动的输出,包 括你输入的空格之类的,不用和等来 表示空格或者回车了 
 利用pre这个标签可以将其包起来的文 字排版、格式,原封不动的 呈现出来。算是相当好用的标签之一。也 就是说你输入的东西被原封不动的输出,包 括你输入的空格之类的,不用和等来 表示ddd 

以下是我在项目里的代码:

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page language="java"%> <?xml version="1.0" encoding="UTF-8" ?> <% String map_URL = (String)request.getParameter("map_URL"); if(map_URL == null){ Object tempURL = request.getAttribute("map_URL"); if(tempURL == null){ map_URL = "com.wxxr.web.ui.config.systemConfig";//TODO test code //map_URL = ""; //TODO if user not support any url system will use default url. }else{ map_URL = tempURL + ""; } } String contextPath = request.getContextPath(); %>

在Eclipse中查看android 源代码的方法! | 写 treeItemrenderer 还是有点儿难度的

评论

发表评论

您还没有登录,请登录后发表评论(快捷键 Alt+S / Ctrl+Enter)

wangpingsx的博客

wangpingsx

搜索本博客

最近访客 >>更多访客

davidgchen1的博客

davidgchen1

whj222126的博客

whj222126 pengchen617的博客

pengchen617

入云涛的博客

入云涛

博客分类

最近加入圈子

评论排行榜

ScoreRank

Posted on

ScoreRank

Algorithm Gossip: 得分排行

说明

假设有一教师依学生座号输入考试分数,现希望在输入完毕后自动显示学生分数的排行,当然学生的分数可能相同。

解法

这个问题基本上要解不难,只要使用额外的一个排行阵列走访分数阵列就可以了,直接使用下面的程式片段作说明: for(i = 0; i < count; i++) { juni[i] = 1; for(j = 0; j < count; j++) { if(score[j] > score[i]) juni[i]++; } } printf("得分\t排行\n"); for(i = 0; i < count; i++) printf("%d\t%d\n", score[i], juni[i]);

上面这个方法虽然简单,但是反覆计算的次数是n^2,如果n值变大,那么运算的时间就会拖长;改变juni阵列的长度为n+2,并将初始值设定为0,如下所示: 得分排行 接下来走访分数阵列,并在分数所对应的排行阵列索引元素上加1,如下所示: 得分排行 将排行阵列最右边的元素设定为1,然后依序将右边的元素值加至左边一个元素,最后排行阵列中的“分数+1””就是得该分数的排行,如下所示: 得分排行 这样的方式看起来复杂,其实不过在计算某分数之前排行的人数,假设89分之前的排行人数为x人,则89分自然就是x+1了,这也是为什么排行阵列最右边要设定为1的原因;如果89分有y人,则88分自然就是x+y+1,整个阵列右边元素向左加的原因正是如此。 如果分数有负分的情况,由于C/C++或Java等程式语言无法处理负的索引,所以必须加上一个偏移值,将所有的分数先往右偏移一个范围即可,最后显示的时候记得减回偏移值就可以了。

实作

  • C /#include /#include /#define MAX 100 /#define MIN 0 int main(void) { int score[MAX+1] = {0}; int juni[MAX+2] = {0}; int count = 0, i; do { printf("输入分数,-1结束:"); scanf("%d", &score[count++]); } while(score[count-1] != -1); count--; for(i = 0; i < count; i++) juni[score[i]]++; juni[MAX+1] = 1; for(i = MAX; i >= MIN; i--) juni[i] = juni[i] + juni[i+1]; printf("得分\t排行\n"); for(i = 0; i < count; i++) printf("%d\t%d\n", score[i], juni[score[i]+1]); return 0; }

  • Java import java.io./*; public class ScoreRank { public static void main(String[] args) throws NumberFormatException, IOException { final int MAX = 100; final int MIN = 0; int[] score = new int[MAX+1]; int[] juni = new int[MAX+2]; BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); int count = 0; do { System.out.print("输入分数,-1结束:"); score[count++] = Integer.parseInt(reader.readLine()); } while((score[count-1] != -1)); count--; for(int i = 0; i < count; i++) juni[score[i]]++; juni[MAX+1] = 1; for(int i = MAX; i >= MIN; i--) juni[i] = juni[i] + juni[i+1]; System.out.println("得分\t排行"); for(int i = 0; i < count; i++) { System.out.println(score[i] + "\t" + juni[score[i]+1]); } } }

Quine

Posted on

Quine

Algorithm Gossip: 自产生程式(quine)

说明

自产生程式(quine)就是要写一个程式,这个程式的目的就是描述它自己,简单的说,如果您写了一个.java,编译它后产生一个.class档,然后 您将.java档案删除,您的.class档不需要.java档,它也可以印出.java档的内容。

解法

根据计算理论(Computation Theorem)递回原理,任何的程式语言都可以简单的写出自产生程式。简单指的是写出自产生程式并不需要特别的算法,只要利用Turing Machine的扩充多带Turing Machine的操作原理就可以写出。 撇开计算理论这看似高深的学科不谈们用一般的解释来说明如何写自产生程式,程式分做A、B两个部分,A部分描述B部分的功能,B部分则 负责将A的描述印出来,A似乎必须倚赖建构好的B,但B要有A才能列印,这看似矛盾,但其实不然,做法是将B编码,放置在不同的字元带上,几个字元带并不 是重点,看程式语言的语法而定,您可能需要多几个带,或少几个带,编码好之后,A部分完成,开始进入B部分,B部分不断在多个字元带上来回,并挑选出字元 并显示出来。

实作

直接看实例会容易懂些,以下是以Java程式实作的自产生程式,还考虑了程式缩排与可读性。 PrintSelf.java The Quine Page 有各种语言的自产生程式之实现。

RadixSort

Posted on

RadixSort

Algorithm Gossip: 基数排序法

说明

在之前所介绍过的排序方法,都是属于“比较性”的排序法,也就是每次排序时 ,都是比较整个键值的大小以进行排序。 这边所要介绍的“基数排序法”(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。

解法

基数排序的方式可以采用LSD(Least sgnificant digital)或MSD(Most sgnificant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 以LSD为例,假设原来有一串数值如下所示: 73, 22, 93, 43, 55, 14, 28, 65, 39, 81 首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中: 0 1 2 3 4 5 6 7 8 9 81 65 39 43 14 55 28 93 22 73 接下来将这些桶子中的数值重新串接起来,成为以下的数列:


81, 22, 73, 93, 43, 14, 55, 65, 28, 39 接着再进行一次分配,这次是根据十位数来分配: 0 1 2 3 4 5 6 7 8 9 28 39 14 22 43 55 65 73 81 93 接下来将这些桶子中的数值重新串接起来,成为以下的数列:


14, 22, 28, 39, 43, 55, 65, 73, 81, 93 这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。 LSD的基数排序适用于位数小的数列,如果位数多的话,使用MSD的效率会比较好,MSD的方式恰与LSD相反,是由高位数为基底开始进行分配,其他的演 算方式则都相同。

实作

  • C /#include /#include int main(void) { int data[10] = {73, 22, 93, 43, 55, 14, 28, 65, 39, 81}; int temp[10][10] = {0}; int order[10] = {0}; int i, j, k, n, lsd; k = 0; n = 1; printf("\n排序前: "); for(i = 0; i < 10; i++) printf("%d ", data[i]); putchar('\n'); while(n <= 10) { for(i = 0; i < 10; i++) { lsd = ((data[i] / n) % 10); temp[lsd][order[lsd]] = data[i]; order[lsd]++; } printf("\n重新排列: "); for(i = 0; i < 10; i++) { if(order[i] != 0) for(j = 0; j < order[i]; j++) { data[k] = temp[i][j]; printf("%d ", data[k]); k++; } order[i] = 0; } n /*= 10; k = 0; } putchar('\n'); printf("\n排序后: "); for(i = 0; i < 10; i++) printf("%d ", data[i]); return 0; }

  • Java public class RadixSort { public static void sort(int[] number, int d) { int k = 0; int n = 1; int[][] temp = new int[number.length][number.length]; int[] order = new int[number.length]; while(n <= d) { for(int i = 0; i < number.length; i++) { int lsd = ((number[i] / n) % 10); temp[lsd][order[lsd]] = number[i]; order[lsd]++; } for(int i = 0; i < number.length; i++) { if(order[i] != 0) for(int j = 0; j < order[i]; j++) { number[k] = temp[i][j]; k++; } order[i] = 0; } n /*= 10; k = 0; } } public static void main(String[] args) { int[] data = {73, 22, 93, 43, 55, 14, 28, 65, 39, 81, 33, 100}; RadixSort.sort(data, 100); for(int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } } }

PossibleSet

Posted on

PossibleSet

Algorithm Gossip: 产生可能的集合

说明

给定一组数字或符号,产生所有可能的集合(包括空集合),例如给定1 2 3,则可能的集合为:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。

解法

如果不考虑字典顺序,则有个简单的方法可以产生所有的集合,思考二进位数字加法,并注意1出现的位置,如果每个位置都对应一个数字,则由1所对应的数字所产生的就是一个集合,例如: 000 {} 001 {3} 010 {2} 011 {2,3} 100 {1} 101 {1,3} 110 {1,2} 111 {1,2,3} 了解这个方法之后,剩下的就是如何产生二进位数?有许多方法可以使用,您可以使用unsigned型别加上&位元运算来产生,这边则是使用阵列搜 寻,首先阵列内容全为0,找第一个1,在还没找到之前将走访过的内容变为0,而第一个找到的0则变为 1,如此重复直到所有的阵列元素都变为1为止,例如: 000 => 100 => 010 => 110 => 001 => 101 => 011 => 111 如果要产生字典顺序,例如若有4个元素,则: {} => {1} => {1,2} => {1,2,3} => {1,2,3,4} => {1,2,4} => {1,3} => {1,3,4} => {1,4} => {2} => {2,3} => {2,3,4} => {2,4} => {3} => {3,4} => {4} 简单的说,如果有n个元素要产生可能的集合,当依序产生集合时,如果最后一个元素是n,而倒数第二个元素是m的话,例如: {a b c d e n} 则下一个集合就是{a b c d e+1},再依序加入后续的元素。 例如有四个元素,而当产生{1 2 3 4}集合时,则下一个集合就是{1 2 3+1},也就是{1 2 4},由于最后一个元素还是4,所以下一个集合就是{1 2+1},也就是{1 3},接下来再加入后续元素4,也就是{1 3 4},由于又遇到元素4,所以下一个集合是{1 3+1},也就是{1 4}。

实作

  • C(无字典顺序) /#include /#include /#define MAXSIZE 20 int main(void) { char digit[MAXSIZE]; int i, j; int n; printf("输入集合个数:"); scanf("%d", &n); for(i = 0; i < n; i++) digit[i] = '0'; printf("\n{}"); // 空集合 while(1) { // 找第一个0,并将找到前所经过的元素变为0 for(i = 0; i < n && digit[i] == '1'; digit[i] = '0', i++); if(i == n) // 找不到0 break; else // 将第一个找到的0变为1 digit[i] = '1'; // 找第一个1,并记录对应位置 for(i = 0; i < n && digit[i] == '0'; i++); printf("\n{%d", i+1); for(j = i + 1; j < n; j++) if(digit[j] == '1') printf(",%d", j + 1); printf("}"); } printf("\n"); return 0; }

  • C(字典顺序) /#include /#include /#define MAXSIZE 20 int main(void) { int set[MAXSIZE]; int i, n, position = 0; printf("输入集合个数:"); scanf("%d", &n); printf("\n{}"); set[position] = 1; while(1) { printf("\n{%d", set[0]); // 印第一个数 for(i = 1; i <= position; i++) printf(",%d", set[i]); printf("}"); if(set[position] < n) { // 递增集合个数 set[position+1] = set[position] + 1; position++; } else if(position != 0) { // 如果不是第一个位置 position--; // 倒退 set[position]++; // 下一个集合尾数 } else // 已倒退至第一个位置 break; } printf("\n"); return 0; }

  • Java(无字典顺序) public class PossibleSet { public static void main(String[] args) { char[] digit = new char[4]; for(int i = 0; i < digit.length; i++) digit[i] = '0'; System.out.println("{}"); // 空集合 while(true) { // 找第一个0,并将找到前所经过的元素变为0 int i; for(i = 0; i < digit.length && digit[i] == '1'; digit[i] = '0', i++); if(i == digit.length) // 找不到0 break; else // 将第一个找到的0变为1 digit[i] = '1'; // 找第一个1,并记录对应位置 for(i = 0; i < digit.length && digit[i] == '0'; i++); System.out.print("{" + (i+1)); for(int j = i + 1; j < digit.length; j++) if(digit[j] == '1') System.out.print(", " + (j + 1)); System.out.println("}"); } } }

  • Java(字典顺序) public class PossibleSet { public static void main(String[] args) { int[] set = new int[4]; int i, n, position = 0; set[position] = 1; while(true) { System.out.print("{" + set[0]); // 印第一个数 for(i = 1; i <= position; i++) System.out.print("," + set[i]); System.out.print("}"); if(set[position] < set.length) { // 递增集合个数 set[position+1] = set[position] + 1; position++; } else if(position != 0) { // 如果不是第一个位置 position--; // 倒退 set[position]++; // 下一个集合尾数 } else // 已倒退至第一个位置 break; } System.out.println(); } }