Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
T
techbook
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
front-end-dev
techbook
Commits
8ab77a6b
Commit
8ab77a6b
authored
Jun 29, 2020
by
zhangyanni
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交
parent
8d395871
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
278 additions
and
9 deletions
+278
-9
phone.scss
public/css/phone.scss
+10
-1
clickoutside.js
src/assets/js/clickoutside.js
+76
-0
dom.js
src/assets/js/dom.js
+174
-0
mobileBottom.vue
src/components/mobile/mobileBottom.vue
+5
-2
index.vue
src/views/mobile/index/index.vue
+4
-3
detail.vue
src/views/mobile/topic/detail.vue
+0
-0
list.vue
src/views/mobile/topic/list.vue
+9
-3
No files found.
public/css/phone.scss
View file @
8ab77a6b
...
...
@@ -971,7 +971,7 @@ i, em {
overflow
:hidden
;
text-overflow
:ellipsis
;
white-space
:nowrap
;
height
:
.
32
rem
;
height
:
.
4
rem
;
}
.secondLeft
{
width
:
70%
;
...
...
@@ -2571,4 +2571,12 @@ i, em {
left
:
.2rem
;
}
}
.fullScreenDiv
{
width
:
100%
;
height
:
100vh
;
background-color
:
transparent
;
position
:
fixed
;
left
:
0
;
top
:
0
;
}
}
\ No newline at end of file
src/assets/js/clickoutside.js
0 → 100644
View file @
8ab77a6b
import
Vue
from
'vue'
;
import
{
on
}
from
'./dom'
;
const
nodeList
=
[];
const
ctx
=
'@@clickoutsideContext'
;
let
startClick
;
let
seed
=
0
;
!
Vue
.
prototype
.
$isServer
&&
on
(
document
,
'mousedown'
,
e
=>
(
startClick
=
e
));
!
Vue
.
prototype
.
$isServer
&&
on
(
document
,
'mouseup'
,
e
=>
{
nodeList
.
forEach
(
node
=>
node
[
ctx
].
documentHandler
(
e
,
startClick
));
});
function
createDocumentHandler
(
el
,
binding
,
vnode
)
{
return
function
(
mouseup
=
{},
mousedown
=
{})
{
if
(
!
vnode
||
!
vnode
.
context
||
!
mouseup
.
target
||
!
mousedown
.
target
||
el
.
contains
(
mouseup
.
target
)
||
el
.
contains
(
mousedown
.
target
)
||
el
===
mouseup
.
target
||
(
vnode
.
context
.
popperElm
&&
(
vnode
.
context
.
popperElm
.
contains
(
mouseup
.
target
)
||
vnode
.
context
.
popperElm
.
contains
(
mousedown
.
target
))))
return
;
if
(
binding
.
expression
&&
el
[
ctx
].
methodName
&&
vnode
.
context
[
el
[
ctx
].
methodName
])
{
vnode
.
context
[
el
[
ctx
].
methodName
]();
}
else
{
el
[
ctx
].
bindingFn
&&
el
[
ctx
].
bindingFn
();
}
};
}
/**
* v-clickoutside
* @desc 点击元素外面才会触发的事件
* @example
* ```vue
* <div v-element-clickoutside="handleClose">
* ```
*/
export
default
{
bind
(
el
,
binding
,
vnode
)
{
nodeList
.
push
(
el
);
const
id
=
seed
++
;
el
[
ctx
]
=
{
id
,
documentHandler
:
createDocumentHandler
(
el
,
binding
,
vnode
),
methodName
:
binding
.
expression
,
bindingFn
:
binding
.
value
};
},
update
(
el
,
binding
,
vnode
)
{
el
[
ctx
].
documentHandler
=
createDocumentHandler
(
el
,
binding
,
vnode
);
el
[
ctx
].
methodName
=
binding
.
expression
;
el
[
ctx
].
bindingFn
=
binding
.
value
;
},
unbind
(
el
)
{
let
len
=
nodeList
.
length
;
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
if
(
nodeList
[
i
][
ctx
].
id
===
el
[
ctx
].
id
)
{
nodeList
.
splice
(
i
,
1
);
break
;
}
}
delete
el
[
ctx
];
}
};
src/assets/js/dom.js
0 → 100644
View file @
8ab77a6b
/* istanbul ignore next */
import
Vue
from
'vue'
;
const
isServer
=
Vue
.
prototype
.
$isServer
;
const
SPECIAL_CHARS_REGEXP
=
/
([\:\-\_]
+
(
.
))
/g
;
const
MOZ_HACK_REGEXP
=
/^moz
([
A-Z
])
/
;
const
ieVersion
=
isServer
?
0
:
Number
(
document
.
documentMode
);
/* istanbul ignore next */
const
trim
=
function
(
string
)
{
return
(
string
||
''
).
replace
(
/^
[\s\u
FEFF
]
+|
[\s\u
FEFF
]
+$/g
,
''
);
};
/* istanbul ignore next */
const
camelCase
=
function
(
name
)
{
return
name
.
replace
(
SPECIAL_CHARS_REGEXP
,
function
(
_
,
separator
,
letter
,
offset
)
{
return
offset
?
letter
.
toUpperCase
()
:
letter
;
}).
replace
(
MOZ_HACK_REGEXP
,
'Moz$1'
);
};
/* istanbul ignore next */
export
const
on
=
(
function
()
{
if
(
!
isServer
&&
document
.
addEventListener
)
{
return
function
(
element
,
event
,
handler
)
{
if
(
element
&&
event
&&
handler
)
{
element
.
addEventListener
(
event
,
handler
,
false
);
}
};
}
else
{
return
function
(
element
,
event
,
handler
)
{
if
(
element
&&
event
&&
handler
)
{
element
.
attachEvent
(
'on'
+
event
,
handler
);
}
};
}
})();
/* istanbul ignore next */
export
const
off
=
(
function
()
{
if
(
!
isServer
&&
document
.
removeEventListener
)
{
return
function
(
element
,
event
,
handler
)
{
if
(
element
&&
event
)
{
element
.
removeEventListener
(
event
,
handler
,
false
);
}
};
}
else
{
return
function
(
element
,
event
,
handler
)
{
if
(
element
&&
event
)
{
element
.
detachEvent
(
'on'
+
event
,
handler
);
}
};
}
})();
/* istanbul ignore next */
export
const
once
=
function
(
el
,
event
,
fn
)
{
var
listener
=
function
()
{
if
(
fn
)
{
fn
.
apply
(
this
,
arguments
);
}
off
(
el
,
event
,
listener
);
};
on
(
el
,
event
,
listener
);
};
/* istanbul ignore next */
export
function
hasClass
(
el
,
cls
)
{
if
(
!
el
||
!
cls
)
return
false
;
if
(
cls
.
indexOf
(
' '
)
!==
-
1
)
throw
new
Error
(
'className should not contain space.'
);
if
(
el
.
classList
)
{
return
el
.
classList
.
contains
(
cls
);
}
else
{
return
(
' '
+
el
.
className
+
' '
).
indexOf
(
' '
+
cls
+
' '
)
>
-
1
;
}
};
/* istanbul ignore next */
export
function
addClass
(
el
,
cls
)
{
if
(
!
el
)
return
;
var
curClass
=
el
.
className
;
var
classes
=
(
cls
||
''
).
split
(
' '
);
for
(
var
i
=
0
,
j
=
classes
.
length
;
i
<
j
;
i
++
)
{
var
clsName
=
classes
[
i
];
if
(
!
clsName
)
continue
;
if
(
el
.
classList
)
{
el
.
classList
.
add
(
clsName
);
}
else
if
(
!
hasClass
(
el
,
clsName
))
{
curClass
+=
' '
+
clsName
;
}
}
if
(
!
el
.
classList
)
{
el
.
className
=
curClass
;
}
};
/* istanbul ignore next */
export
function
removeClass
(
el
,
cls
)
{
if
(
!
el
||
!
cls
)
return
;
var
classes
=
cls
.
split
(
' '
);
var
curClass
=
' '
+
el
.
className
+
' '
;
for
(
var
i
=
0
,
j
=
classes
.
length
;
i
<
j
;
i
++
)
{
var
clsName
=
classes
[
i
];
if
(
!
clsName
)
continue
;
if
(
el
.
classList
)
{
el
.
classList
.
remove
(
clsName
);
}
else
if
(
hasClass
(
el
,
clsName
))
{
curClass
=
curClass
.
replace
(
' '
+
clsName
+
' '
,
' '
);
}
}
if
(
!
el
.
classList
)
{
el
.
className
=
trim
(
curClass
);
}
};
/* istanbul ignore next */
export
const
getStyle
=
ieVersion
<
9
?
function
(
element
,
styleName
)
{
if
(
isServer
)
return
;
if
(
!
element
||
!
styleName
)
return
null
;
styleName
=
camelCase
(
styleName
);
if
(
styleName
===
'float'
)
{
styleName
=
'styleFloat'
;
}
try
{
switch
(
styleName
)
{
case
'opacity'
:
try
{
return
element
.
filters
.
item
(
'alpha'
).
opacity
/
100
;
}
catch
(
e
)
{
return
1.0
;
}
default
:
return
(
element
.
style
[
styleName
]
||
element
.
currentStyle
?
element
.
currentStyle
[
styleName
]
:
null
);
}
}
catch
(
e
)
{
return
element
.
style
[
styleName
];
}
}
:
function
(
element
,
styleName
)
{
if
(
isServer
)
return
;
if
(
!
element
||
!
styleName
)
return
null
;
styleName
=
camelCase
(
styleName
);
if
(
styleName
===
'float'
)
{
styleName
=
'cssFloat'
;
}
try
{
var
computed
=
document
.
defaultView
.
getComputedStyle
(
element
,
''
);
return
element
.
style
[
styleName
]
||
computed
?
computed
[
styleName
]
:
null
;
}
catch
(
e
)
{
return
element
.
style
[
styleName
];
}
};
/* istanbul ignore next */
export
function
setStyle
(
element
,
styleName
,
value
)
{
if
(
!
element
||
!
styleName
)
return
;
if
(
typeof
styleName
===
'object'
)
{
for
(
var
prop
in
styleName
)
{
if
(
styleName
.
hasOwnProperty
(
prop
))
{
setStyle
(
element
,
prop
,
styleName
[
prop
]);
}
}
}
else
{
styleName
=
camelCase
(
styleName
);
if
(
styleName
===
'opacity'
&&
ieVersion
<
9
)
{
element
.
style
.
filter
=
isNaN
(
value
)
?
''
:
'alpha(opacity='
+
value
*
100
+
')'
;
}
else
{
element
.
style
[
styleName
]
=
value
;
}
}
};
src/components/mobile/mobileBottom.vue
View file @
8ab77a6b
...
...
@@ -17,6 +17,8 @@
<!--
<p
@
click=
"privacypolicy"
>
{{
$t
(
"bottomNav.protocol2"
)
}}
</p>
-->
<!--
</div>
-->
<div
class=
"bottomCopyRight"
>
<!--
<p>
@2020 All Copyright Reserved By Techcode.com
</p>
-->
<!--
<p>
冀ICP备15012625号-1
</p>
-->
<p>
@2020 All Copyright Reserved By Techcode.com
</p>
<p>
冀ICP备15012625号-1
</p>
...
...
@@ -106,12 +108,13 @@
}
&
>
div
.bottomCopyRight
{
text-align
:
center
;
font-size
:
.2
4
rem
;
font-size
:
.2rem
;
display
:
flex
;
flex-wrap
:
wrap
;
p
{
width
:
100%
;
color
:
#69697A
;
color
:
#AAAAAA
;
line-height
:
.35rem
;
}
}
...
...
src/views/mobile/index/index.vue
View file @
8ab77a6b
...
...
@@ -149,7 +149,7 @@
<li
@
click=
"handleToSubjectProject(item)"
v-if=
"item.contentType=='subjectActivity'"
class=
"borderBottomLi"
:class=
"index==allDataInfo.length-1?'lastLi':''"
>
<div
class=
"articleNoImg"
>
<div>
<div
style=
"display: flex;align-items: center;"
>
<span
class=
"hotIcon"
v-if=
"item.contentDetail.isHot==1"
></span>
<span
class=
"articleTitle"
>
{{
item
.
contentDetail
.
subjectTitle
}}
</span>
</div>
...
...
@@ -1956,7 +1956,7 @@
}
i
{
color
:
#FF5D5D
;
font-size
:
.
3
rem
;
font-size
:
.
4
rem
;
}
}
.subjectZy
{
...
...
@@ -1968,6 +1968,7 @@
-webkit-line-clamp
:
2
;
word-break
:
break-all
;
overflow
:
hidden
;
padding-top
:
.1rem
;
}
.hotIcon
{
display
:
inline-block
;
...
...
@@ -2071,7 +2072,7 @@
justify-content
:
center
;
}
.tabBar
{
margin-top
:
.
2
rem
;
margin-top
:
.
1
rem
;
margin-bottom
:
.4rem
;
width
:
100%
;
display
:
flex
;
...
...
src/views/mobile/topic/detail.vue
View file @
8ab77a6b
This diff is collapsed.
Click to expand it.
src/views/mobile/topic/list.vue
View file @
8ab77a6b
...
...
@@ -5,7 +5,7 @@
<div
class=
"topicContent"
>
<ul>
<li
v-for=
"(item,index) in tableData"
:key=
"item.topicId"
:style=
"
{paddingBottom:0}">
<div
class=
"articleHasImg"
@
click=
"handleToDetail(item)"
>
<div
class=
"articleHasImg"
@
click=
"handleToDetail(item)"
:style=
"
{paddingBottom:item.secondList.length>0?'0':'.3rem'}"
>
<div
class=
"leftInfo"
:style=
"
{backgroundImage:'url('+item.topicCover+')'}">
</div>
...
...
@@ -27,7 +27,7 @@
</p>
</div>
</div>
<div
class=
"topicHasChildren"
>
<div
class=
"topicHasChildren"
v-if=
"item.secondList.length>0"
>
<div
v-for=
"seconItem in item.secondList"
@
click=
"handleToDetail(seconItem)"
>
<div
class=
"secondLeft"
>
<span
class=
"circleRed"
>
•
</span>
...
...
@@ -247,6 +247,9 @@
}
.articleHasImg
{
padding
:
0
.2rem
;
.masterInfo
{
padding-top
:
.2rem
;
}
}
.topicTitle
{
width
:
100%
;
...
...
@@ -254,6 +257,8 @@
display
:
flex
;
align-items
:
center
;
.articleTitle
{
font-size
:
.3rem
;
font-weight
:
bold
;
display
:
inline-block
;
line-height
:
unset
;
max-width
:
100%
;
...
...
@@ -266,7 +271,7 @@
}
i
{
color
:
#FF5D5D
;
font-size
:
.
3
rem
;
font-size
:
.
4
rem
;
}
}
</
style
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment