当前位置: 首页 > news >正文

成都水高新区建设局官方网站郑州网络推广平台

成都水高新区建设局官方网站,郑州网络推广平台,贵州网站建设设计,网站建设下一步工作计划本文关键讲解了HTML 拖拖拉拉作用的完成代码,文中给各位讲解的特别详尽,对我们的学习培训或工作中具备一定的参考参考使用价值,必须的小伙伴能够参考下 根据 vue 此作用核心内容便是根据 JavaScript 代码操纵 node 在界面上的左侧距与顶部距&#xff0…

本文关键讲解了HTML 拖拖拉拉作用的完成代码,文中给各位讲解的特别详尽,对我们的学习培训或工作中具备一定的参考参考使用价值,必须的小伙伴能够参考下

根据 vue

此作用核心内容便是根据 JavaScript 代码操纵 node 在界面上的左侧距与顶部距,不一样的的样式定位方式有不一样的解决方案

本方法选用position: absolute定位方式的解决方案

css 样式的关键代码
1
2
3
4
// 父容器核心样式

width: 100%;
height: 100%;

1
2
3
4
5
// 子容器核心样式
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);

父容器通过width && height字段占满整个浏览器的可视范围,子容器通过position: absolute属性开启在父容器内的绝对定位,在通过top && left && transform: translate(-50%, -50%)属性控制子容器在父容器内的绝对位置

JavaScript 逻辑控制的核心代码
首先分解下,要实现 node 的移动需要哪些步骤和对应的 event 事件

子容器创建时,在父容器内的绝对位置
鼠标按键按下时,onmousedown 事件
鼠标移动时,onmousemove 事件
鼠标按键弹起时,onmouseup 事件
只要使用 onMousedown、onMousemove和onMouseup 这三个事件,就可以实现最简单的移动

1
2
3
4
5
6
7
8
/*

  • 在子容器创建的时候获取子容器相对于父容器的 top 和 left 位置
    */

mounted () {
this.left = this.refs.fatherBox.offsetLeftthis.top=this.refs.fatherBox.offsetLeft this.top = this.refs.fatherBox.offsetLeftthis.top=this.refs.fatherBox.offsetTop
}

1
2
3
4
5
6
7
8
9
10
11
12
13
/*

  • 鼠标按下时
    1. 开启允许子容器移动的 flag
    1. 记录鼠标点击时的位置信息
      */

mouseDown (e) {
// 设置允许弹窗移动的 flag
this.moveFlag = true
// 保存鼠标开始位置
this.startLeft = e.clientX - this.left
this.startTop = e.clientY - this.top
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*

  • 鼠标移动时
    1. 判断 flag 是否允许子容器移动
    1. 设置弹框左边位置
    1. 设置弹框右边位置
      */

move (e) {
// 判断 flag 是否允许移动
if (!this.moveFlag) return

// 设置弹框左边位置
this.left = e.clientX - this.startLeft
// 设置弹框右边位置
this.top = e.clientY - this.startTop

}

1
2
3
4
5
6
7
8
/*

  • 鼠标按键弹起时
    1. 关闭允许子容器移动的 flag
      */

mouseUp (e) {
this.flag = false
}

通过这几个方法就可以获取鼠标按下移动时,鼠标的top 和 left 的偏移量,通过把这偏移量暴露出去给父组件,父组件实时设置子组件的 top 和 left 值,来使得子容器跟随鼠标的移动

父组件部分代码
父组件通过设置子组件的 ref、zIndex 值,而且父组件的 backValue 方法会从子组件接收 zIndex 值,通过 zIndex 来识别具体的子组件实例

/*

  • 父组件代码片段 jsx 版
    */

export default {
props: {
playList: {
type: Array,
required: true
}
},
render () {
return (
<div style={{width: ‘100%’, height: ‘100%’}} ref={‘father’}>
{
this.playList && this.playList.map((item, index) => {
return (

)
})
}

)
},
methods: {
backValue (left, top, zIndex) {
this.refs[zIndex].refs[zIndex].refs[zIndex].el.style.top = ${top}px
this.refs[zIndex].refs[zIndex].refs[zIndex].el.style.left = ${left}px
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

<!-- 父组件代码片段 vue 文件版 --><template><divref="father"style"width: 100%, height: 100%"><ChildComponentsv-for="(item, index) in playList":key="index":ref="index":visible="true":z-index="index":back-value="backValue":info="item":close="close":width="600":height="400"/></div>
</template>
<script>
export default {components: {VideoPlayerModal},props: {playList: {type: Array,required: true}},methods: {backValue (left, top, zIndex) {this.$refs[zIndex][0].$el.style.top = `${top}px`this.$refs[zIndex][0].$el.style.left = `${left}px`}}
}
</script>

设置子组件的围栏范围
这个功能只需要在 onmousemove 事件中进行判断 子容器的 top 和 left 是否超出浏览器的可视范围

/*

    1. this.width 数据为父组件传递进来的 width 值,或者子组件本身设置的默认值
    1. this.height 数据为父组件传递进来的 height 值,或者子组件本身设置的默认值
      */

move (e) {
// 判断 flag 是否允许移动
if (!this.moveFlag) return

// 判断是否超出左边视图
if (this.$refs.fatherBox.offsetLeft < this.width / 2) {
// 禁止弹框移动
this.moveFlag = false
// 设置弹框左边位置
this.left = this.width / 2 + 10
// 调用回调函数把偏移量暴露给父组件
this.backValue(this.left, this.top, this.zIndex)
return
}

  // 判断是否超出右边视图if (this.$refs.fatherBox.offsetLeft > document.body.clientWidth - this.width / 2) {// 禁止弹框移动this.moveFlag = false// 设置弹框右边位置this.left = document.body.clientWidth - this.width / 2 - 10// 调用回调函数把偏移量暴露给父组件this.backValue(this.left, this.top, this.zIndex)return}// 判断是否超出顶部视图if (this.$refs.fatherBox.offsetTop < this.height / 2 + 70) {// 禁止弹框移动this.moveFlag = false// 设置弹框顶部位置this.top = this.height / 2 + 70 + 10// 调用回调函数把偏移量暴露给父组件this.backValue(this.left, this.top, this.zIndex)return}// 判断是否超出底部视图if (this.$refs.fatherBox.offsetTop > document.body.clientHeight - this.height / 2 - 50) {// 禁止弹框移动this.moveFlag = false// 设置弹框底部位置this.top = document.body.clientHeight - this.height / 2 - 50 - 10// 调用回调函数把偏移量暴露给父组件this.backValue(this.left, this.top, this.zIndex)return( http://www.qlyl1688.com/articles/ycxzsq1302.html )}// 设置弹框左边位置this.left = e.clientX - this.startLeft// 设置弹框右边位置this.top = e.clientY - this.startTop// 调用回调函数把偏移量暴露给父组件this.backValue(this.left, this.top, this.zIndex)

}

子组件还要设置一个当鼠标超出子容器时的 onmouseout 事件,用来防止不可预期的 bug 问题

1
2
3
mouseOut (e) {
this.moveFlag = false
}

转自脚本之家

http://www.lbrq.cn/news/2666989.html

相关文章:

  • 电子商务网站的建设与维护方法爱站网站排名查询工具
  • 沈阳网站设计制作公司网络营销专家
  • 电影网站是怎么做的上海网络推广联盟
  • 专业的网站开发公司电话优化大师下载安装免费
  • wordpress videotheme网站推广优化外包公司哪家好
  • 做外贸在什么网站最好有没有免费的seo网站
  • 酒店网站制作苏州百度推广代理商
  • 中石化第四建设有限公司网站百度网址大全 官网首页
  • 网站开发可以自学吗seo优化包括
  • 做网站包括图片设计吗深圳谷歌推广公司
  • 学做ppt的网站有哪些内容广告制作公司
  • 济南网站优化收费标准苏州网站制作开发公司
  • 公众号引流推广吸粉方案seo快速排名网站优化
  • 网站创建需要多少钱营销模式有几种
  • 湛江做网站的公司百度搜索引擎的使用方法
  • 天津百度网站排名优化网站外链代发
  • 济南免费网站建设西安seo外包公司
  • 深圳有哪些网站开发公司专业的seo搜索引擎优化培训
  • 网站建设相关行业有哪些海外seo推广公司
  • 完备的常州网站优化搜索引擎的优化方法
  • 凡科网免费建站步骤及视频如何优化seo关键词
  • 福永做网站网络营销成功的品牌
  • 在线做托福的网站怎么在百度上面打广告
  • 宁波建设协会网站首页对网站进行seo优化
  • 现在建网站做推广能赚钱吗新余seo
  • 做网站图sem竞价代运营公司
  • 建设个人网站详细点如何制作小程序
  • 网站建设业务怎么做企业培训课程有哪些
  • 虚拟主机怎么弄网站怎样在百度上发布信息
  • 什么叫域名武汉网站seo推广
  • vue2升级vue3:单文件组件概述 及常用api
  • Java 后端性能优化实战:从 SQL 到 JVM 调优
  • WSL创建虚拟机配置VNC
  • ​LabVIEW键盘鼠标监控
  • 百度网盘如何做到下载速度最快?OpenSpeedy绿色安装版下载,开源免费网盘加速
  • 【工具】Python多环境管理