zoukankan
html css js c++ java
js 模拟选择文件效果
代码来自网络
<
html
>
<
head
>
</
head
>
<
style
>
body
{
}
{
padding-top
:
50px
;
padding-left
:
100px
;
padding-right
:
150px
;
}
.fileDiv
{
}
{
float
:
left
;
width
:
100px
;
height
:
100px
;
text-align
:
center
;
line-height
:
100px
;
font-size
:
12px
;
border
:
1px solid #cccccc
;
margin-right
:
10px
;
margin-bottom
:
10px
;
}
.seled
{
}
{
border
:
1px solid #ff0000
;
background-color
:
#D6DFF7
;
}
</
style
>
<
script
type
="text/javascript"
>
/**/
/*
--------------------------------- 以下4个方法 摘自网络 ----------------------------------------
*/
Array.prototype.remove
=
function
(item)
{
for
(
var
i
=
0
; i
<
this
.length; i
++
)
{
if
(item
==
this
[i])
break
;
}
if
(i
==
this
.length)
return
;
for
(
var
j
=
i; j
<
this
.length
-
1
; j
++
)
{
this
[j]
=
this
[j
+
1
];
}
this
.length
--
;
}
String.prototype.replaceAll
=
function
(AFindText, ARepText)
{ raRegExp
=
new
RegExp(AFindText,
"
g
"
);
return
this
.replace(raRegExp, ARepText); }
function
getAllChildren(e)
{
return
e.all
?
e.all : e.getElementsByTagName(
'
*
'
);
}
document.getElementsBySelector
=
function
(selector)
{
if
(
!
document.getElementsByTagName)
{
return
new
Array();
}
var
tokens
=
selector.split(
'
'
);
var
currentContext
=
new
Array(document);
for
(
var
i
=
0
; i
<
tokens.length; i
++
)
{
token
=
tokens[i].replace(
/
^\s+
/
,
''
).replace(
/
\s+$
/
,
''
); ;
if
(token.indexOf(
'
#
'
)
>
-
1
)
{
var
bits
=
token.split(
'
#
'
);
var
tagName
=
bits[
0
];
var
id
=
bits[
1
];
var
element
=
document.getElementById(id);
if
(tagName
&&
element.nodeName.toLowerCase()
!=
tagName)
{
return
new
Array();
}
currentContext
=
new
Array(element);
continue
;
}
if
(token.indexOf(
'
.
'
)
>
-
1
)
{
var
bits
=
token.split(
'
.
'
);
var
tagName
=
bits[
0
];
var
className
=
bits[
1
];
if
(
!
tagName)
{
tagName
=
'
*
'
;
}
var
found
=
new
Array;
var
foundCount
=
0
;
for
(
var
h
=
0
; h
<
currentContext.length; h
++
)
{
var
elements;
if
(tagName
==
'
*
'
)
{
elements
=
getAllChildren(currentContext[h]);
}
else
{
elements
=
currentContext[h].getElementsByTagName(tagName);
}
for
(
var
j
=
0
; j
<
elements.length; j
++
)
{
found[foundCount
++
]
=
elements[j];
}
}
currentContext
=
new
Array;
var
currentContextIndex
=
0
;
for
(
var
k
=
0
; k
<
found.length; k
++
)
{
if
(found[k].className
&&
found[k].className.match(
new
RegExp(
'
\\b
'
+
className
+
'
\\b
'
)))
{
currentContext[currentContextIndex
++
]
=
found[k];
}
}
continue
;
}
if
(token.match(
/
^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$
/
))
{
var
tagName
=
RegExp.$
1
;
var
attrName
=
RegExp.$
2
;
var
attrOperator
=
RegExp.$
3
;
var
attrValue
=
RegExp.$
4
;
if
(
!
tagName)
{
tagName
=
'
*
'
;
}
var
found
=
new
Array;
var
foundCount
=
0
;
for
(
var
h
=
0
; h
<
currentContext.length; h
++
)
{
var
elements;
if
(tagName
==
'
*
'
)
{
elements
=
getAllChildren(currentContext[h]);
}
else
{
elements
=
currentContext[h].getElementsByTagName(tagName);
}
for
(
var
j
=
0
; j
<
elements.length; j
++
)
{
found[foundCount
++
]
=
elements[j];
}
}
currentContext
=
new
Array;
var
currentContextIndex
=
0
;
var
checkFunction;
switch
(attrOperator)
{
case
'
=
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName)
==
attrValue); }
;
break
;
case
'
~
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName).match(
new
RegExp(
'
\\b
'
+
attrValue
+
'
\\b
'
))); }
;
break
;
case
'
|
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName).match(
new
RegExp(
'
^
'
+
attrValue
+
'
-?
'
))); }
;
break
;
case
'
^
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName).indexOf(attrValue)
==
0
); }
;
break
;
case
'
$
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName).lastIndexOf(attrValue)
==
e.getAttribute(attrName).length
-
attrValue.length); }
;
break
;
case
'
*
'
:
checkFunction
=
function
(e)
{
return
(e.getAttribute(attrName).indexOf(attrValue)
>
-
1
); }
;
break
;
default
:
checkFunction
=
function
(e)
{
return
e.getAttribute(attrName); }
;
}
currentContext
=
new
Array;
var
currentContextIndex
=
0
;
for
(
var
k
=
0
; k
<
found.length; k
++
)
{
if
(checkFunction(found[k]))
{
currentContext[currentContextIndex
++
]
=
found[k];
}
}
continue
;
}
tagName
=
token;
var
found
=
new
Array;
var
foundCount
=
0
;
for
(
var
h
=
0
; h
<
currentContext.length; h
++
)
{
var
elements
=
currentContext[h].getElementsByTagName(tagName);
for
(
var
j
=
0
; j
<
elements.length; j
++
)
{
found[foundCount
++
]
=
elements[j];
}
}
currentContext
=
found;
}
return
currentContext;
}
/**/
/*
--------------------------------------------------------------------------------------------------------
*/
/**/
/*
*
* author: 王永山
* version: 1.1 beta
* date: 2008-09-09
* email: [email]wangys0927@163.com[/email]
*
* update:
* 1. 针对前2个beta版,该版本修复了前两个版本出现的 bug ,
* 2. 进行了代码的简单封装(由于本人初学js,对js掌握的很浅,因此面向对象的理解很差,封装的不好);
* 3. 增加了对 Ctrl 和 Shift 键的支持(目前shift键的功能和ctrl键的功能一样,还不能达到仿windows的选区Shift键的功能)。
* 4. 增加了获取“被选区选中元素”的方法,可以点击按钮“getRegions”看效果。
*/
function
addEvent(eventType, eventFunc, eventObj)
{
eventObj
=
eventObj
||
document;
if
(window.attachEvent) eventObj.attachEvent(
"
on
"
+
eventType, eventFunc);
if
(window.addEventListener) eventObj.addEventListener(eventType, eventFunc,
false
);
}
function
clearEventBubble(evt)
{
evt
=
evt
||
window.event;
if
(evt.stopPropagation) evt.stopPropagation();
else
evt.cancelBubble
=
true
;
if
(evt.preventDefault) evt.preventDefault();
else
evt.returnValue
=
false
;
}
function
posXY(event)
{
event
=
event
||
window.event;
var
posX
=
event.pageX
||
(event.clientX
+
(document.documentElement.scrollLeft
||
document.body.scrollLeft));
var
posY
=
event.pageY
||
(event.clientY
+
(document.documentElement.scrollTop
||
document.body.scrollTop));
return
{ x: posX, y: posY }
;
}
//
----------- 区域选择关键方法 -----------------------
var
_selectedRegions
=
[];
function
RegionSelect(selRegionProp)
{
this
.regions
=
[];
var
_regions
=
document.getElementsBySelector(selRegionProp[
"
region
"
]);
if
(_regions
&&
_regions.length
>
0
)
{
var
_self
=
this
;
for
(
var
i
=
0
; i
<
_regions.length; i
++
)
{
_regions[i].onmousedown
=
function
()
{
var
evt
=
window.event
||
arguments[
0
];
if
(
!
evt.shiftKey
&&
!
evt.ctrlKey)
{
//
清空所有select样式
_self.clearSelections(_regions);
this
.className
+=
"
"
+
_self.selectedClass;
//
清空selected数组,并加入当前select中的元素
_selectedRegions
=
[];
_selectedRegions.push(
this
);
}
else
{
if
(
this
.className.indexOf(_self.selectedClass)
==
-
1
)
{
this
.className
+=
"
"
+
_self.selectedClass;
_selectedRegions.push(
this
);
}
else
{
this
.className
=
this
.className.replaceAll(_self.selectedClass,
""
);
_selectedRegions.remove(
this
);
}
}
clearEventBubble(evt);
}
this
.regions.push(_regions[i]);
}
}
this
.selectedClass
=
selRegionProp[
"
selectedClass
"
];
this
.selectedRegion
=
[];
this
.selectDiv
=
null
;
this
.startX
=
null
;
this
.startY
=
null
;
}
RegionSelect.prototype.select
=
function
()
{
var
_self
=
this
;
addEvent(
"
mousedown
"
,
function
()
{
var
evt
=
window.event
||
arguments[
0
];
_self.onBeforeSelect(evt);
clearEventBubble(evt);
}
, document);
addEvent(
"
mousemove
"
,
function
()
{
var
evt
=
window.event
||
arguments[
0
];
_self.onSelect(evt);
clearEventBubble(evt);
}
, document);
addEvent(
"
mouseup
"
,
function
()
{
_self.onEnd();
}
, document);
}
RegionSelect.prototype.onBeforeSelect
=
function
(evt)
{
//
创建模拟 选择框
if
(
!
document.getElementById(
"
selContainer
"
))
{
this
.selectDiv
=
document.createElement(
"
div
"
);
this
.selectDiv.style.cssText
=
"
position:absolute;0px;height:0px;font-size:0px;margin:0px;padding:0px;border:1px dashed #0099FF;background-color:#C3D5ED;z-index:1000;filter:alpha(opacity:60);opacity:0.6;display:none;
"
;
this
.selectDiv.id
=
"
selContainer
"
;
document.body.appendChild(
this
.selectDiv);
}
else
{
this
.selectDiv
=
document.getElementById(
"
selContainer
"
);
}
this
.startX
=
posXY(evt).x;
this
.startY
=
posXY(evt).y;
this
.isSelect
=
true
;
}
RegionSelect.prototype.onSelect
=
function
(evt)
{
var
_self
=
this
;
if
(_self.isSelect)
{
if
(_self.selectDiv.style.display
==
"
none
"
) _self.selectDiv.style.display
=
""
;
var
posX
=
posXY(evt).x;
var
poxY
=
posXY(evt).y;
_self.selectDiv.style.left
=
Math.min(posX,
this
.startX);
_self.selectDiv.style.top
=
Math.min(poxY,
this
.startY);
_self.selectDiv.style.width
=
Math.abs(posX
-
this
.startX);
_self.selectDiv.style.height
=
Math.abs(poxY
-
this
.startY);
var
regionList
=
_self.regions;
for
(
var
i
=
0
; i
<
regionList.length; i
++
)
{
var
r
=
regionList[i], sr
=
_self.innerRegion(_self.selectDiv, r);
if
(sr
&&
r.className.indexOf(_self.selectedClass)
==
-
1
)
{
r.className
=
r.className
+
"
"
+
_self.selectedClass;
_selectedRegions.push(r);
}
else
if
(
!
sr
&&
r.className.indexOf(_self.selectedClass)
!=
-
1
)
{
r.className
=
r.className.replaceAll(_self.selectedClass,
""
);
_selectedRegions.remove(r);
}
}
}
}
RegionSelect.prototype.onEnd
=
function
()
{
if
(
this
.selectDiv)
{
this
.selectDiv.style.display
=
"
none
"
;
}
this
.isSelect
=
false
;
//
_selectedRegions = this.selectedRegion;
}
//
判断一个区域是否在选择区内
RegionSelect.prototype.innerRegion
=
function
(selDiv, region)
{
var
s_top
=
parseInt(selDiv.style.top);
var
s_left
=
parseInt(selDiv.style.left);
var
s_right
=
s_left
+
parseInt(selDiv.offsetWidth);
var
s_bottom
=
s_top
+
parseInt(selDiv.offsetHeight);
var
r_top
=
parseInt(region.offsetTop);
var
r_left
=
parseInt(region.offsetLeft);
var
r_right
=
r_left
+
parseInt(region.offsetWidth);
var
r_bottom
=
r_top
+
parseInt(region.offsetHeight);
var
t
=
Math.max(s_top, r_top);
var
r
=
Math.min(s_right, r_right);
var
b
=
Math.min(s_bottom, r_bottom);
var
l
=
Math.max(s_left, r_left);
if
(b
>
t
+
5
&&
r
>
l
+
5
)
{
return
region;
}
else
{
return
null
;
}
}
RegionSelect.prototype.clearSelections
=
function
(regions)
{
for
(
var
i
=
0
; i
<
regions.length; i
++
)
{
regions[i].className
=
regions[i].className.replaceAll(
this
.selectedClass,
""
);
}
}
function
getSelectedRegions()
{
return
_selectedRegions;
}
/**/
/*
-------------------------------------- 区域选择方法结束 --------------------------------------------
*/
function
showSelDiv()
{
var
selInfo
=
""
;
var
arr
=
getSelectedRegions();
for
(
var
i
=
0
; i
<
arr.length; i
++
)
{
selInfo
+=
arr[i].innerHTML
+
"
\n
"
;
}
alert(
"
共选择
"
+
arr.length
+
"
个文件,分别是:\n
"
+
selInfo);
}
</
script
>
<
body
>
<
button
onclick
="showSelDiv();"
>
getRegions
</
button
>
<
div
class
="fileDiv"
>
file1
</
div
>
<
div
class
="fileDiv"
>
file2
</
div
>
<
div
class
="fileDiv"
>
file3
</
div
>
<
div
class
="fileDiv"
>
file4
</
div
>
<
div
class
="fileDiv"
>
file5
</
div
>
<
div
class
="fileDiv"
>
file6
</
div
>
<
div
class
="fileDiv"
>
file7
</
div
>
<
div
class
="fileDiv"
>
file8
</
div
>
<
div
class
="fileDiv"
>
file9
</
div
>
<
div
class
="fileDiv"
>
file10
</
div
>
<
div
class
="fileDiv"
>
file11
</
div
>
<
div
class
="fileDiv"
>
file12
</
div
>
<
div
class
="fileDiv"
>
file13
</
div
>
<
div
class
="fileDiv"
>
file14
</
div
>
<
div
class
="fileDiv"
>
file15
</
div
>
<
div
class
="fileDiv"
>
file16
</
div
>
<
div
class
="fileDiv"
>
file17
</
div
>
<
div
class
="fileDiv"
>
file18
</
div
>
<
div
class
="fileDiv"
>
file19
</
div
>
<
div
class
="fileDiv"
>
file20
</
div
>
<
div
class
="fileDiv"
>
file21
</
div
>
<
div
class
="fileDiv"
>
file22
</
div
>
<
div
class
="fileDiv"
>
file23
</
div
>
<
div
class
="fileDiv"
>
file24
</
div
>
<
div
class
="fileDiv"
>
file25
</
div
>
<
div
class
="fileDiv"
>
file26
</
div
>
<
div
class
="fileDiv"
>
file27
</
div
>
<
div
class
="fileDiv"
>
file28
</
div
>
<
div
class
="fileDiv"
>
file29
</
div
>
<
div
class
="fileDiv"
>
file30
</
div
>
<
div
class
="fileDiv"
>
file31
</
div
>
<
div
class
="fileDiv"
>
file32
</
div
>
<
div
class
="fileDiv"
>
file33
</
div
>
<
div
class
="fileDiv"
>
file34
</
div
>
<
div
class
="fileDiv"
>
file35
</
div
>
<
div
class
="fileDiv"
>
file36
</
div
>
<
div
class
="fileDiv"
>
file37
</
div
>
<
div
class
="fileDiv"
>
file38
</
div
>
<
div
class
="fileDiv"
>
file39
</
div
>
<
div
class
="fileDiv"
>
file40
</
div
>
<
div
class
="fileDiv"
>
file41
</
div
>
<
div
class
="fileDiv"
>
file42
</
div
>
<
div
class
="fileDiv"
>
file43
</
div
>
<
div
class
="fileDiv"
>
file44
</
div
>
<
div
class
="fileDiv"
>
file45
</
div
>
<
div
class
="fileDiv"
>
file46
</
div
>
<
div
class
="fileDiv"
>
file47
</
div
>
<
div
class
="fileDiv"
>
file48
</
div
>
<
div
class
="fileDiv"
>
file49
</
div
>
<
div
class
="fileDiv"
>
file50
</
div
>
<
div
class
="fileDiv"
>
file51
</
div
>
<
div
class
="fileDiv"
>
file52
</
div
>
<
div
class
="fileDiv"
>
file53
</
div
>
<
div
class
="fileDiv"
>
file54
</
div
>
<
div
class
="fileDiv"
>
file55
</
div
>
<
div
class
="fileDiv"
>
file56
</
div
>
<
div
class
="fileDiv"
>
file57
</
div
>
<
div
class
="fileDiv"
>
file58
</
div
>
<
div
class
="fileDiv"
>
file59
</
div
>
<
div
class
="fileDiv"
>
file60
</
div
>
<
div
style
="float: left; 100%;"
>
<
button
onclick
="showSelDiv();"
>
getRegions
</
button
></
div
>
</
body
>
<
script
>
new
RegionSelect(
{
region:
'
div.fileDiv
'
,
selectedClass:
'
seled
'
}
).select();
</
script
>
</
html
>
查看全文
相关阅读:
ResourceBundle读取utf-8格式properties 中文乱码
jquery checkbox选中
扩展RBAC用户角色权限设计方案<转>
Java调用doNet webService方法
Mybatis批量更新<转>
Json转list,两种包,两种方式
win8.1 64位安装oracle10g客户端心得
关于JXL读写以及修改EXCEL文件<转>
Oracle主表列表上显示从表字段拼成的字符串
ExtJS获取Grid的行数
原文地址:https://www.cnblogs.com/yiki/p/1585911.html
最新文章
204. Count Primes
203. Remove Linked List Elements
202. Happy Number
198. House Robber
191. Number of 1 Bits
190. Reverse Bits
第10章 Shell编程(3)_字符处理命令和条件判断
第10章 Shell编程(2)_字符截取命令
第10章 Shell编程(1)_正则表达式
第9章 Shell基础(4)_Bash的运算符及环境变量配置文件
热门文章
第9章 Shell基础(3)_Bash的变量
第9章 Shell基础(2)_Bash基本功能
第68课 基础图形绘制(下)
第9章 Shell基础(1)_Shell简介和脚本执行方式
第8章 文件系统管理(2)_挂载、fdisk分区及分配swap分区
第8章 文件系统管理(1)_文件系统和常用命令
第7章 权限管理(3)_文件系统属性和sudo权限
第7章 权限管理(2)_文件特殊权限(SUID、SGID、SBIT)
第7章 权限管理(1)_ACL权限
第4课 程序灵魂的审判
Copyright © 2011-2022 走看看