4.弹出层组件的实现与封装

1. 在这个项目中,弹出层组件出现的方式很多,主要有以下三种

     

 这三种的主要区别在于:是否需要蒙版、是否有蒙版颜色、蒙版的位置是在底部还是随这操作变化位置

1. 位于底部固定的弹出层

代码如下:

<template>
	<view style="z-index:999;overflow:hidden" v-if="avalilable">
		<!-- 蒙版 -->
		<view
			class="position-fixed left-0 right-0 top-0 bottom-0"
			:style="getMaskColor"
			@click="hidden"
			v-if="mask"
		></view>

		<!-- 弹出框 -->
		<view class="position-fixed bg-white" :class="atBottom">
			<!-- <view  style="height: 300rpx;"></view> -->
			<slot></slot>
		</view>
	</view>
</template>

<script>
	export default {
		props: {
			//蒙版颜色
			maskColor: {
				type: Boolean,
				default: true
			},
			//是否开启蒙版
			mask: {
				type: Boolean,
				default: true
			},
			//是否处于底部
			bottom: {
				type: Boolean,
				default: true
			}
		},
		created() {
			console.log(this.bottom)
		},
		data() {
			return {
				avalilable: false
			}
		},
		methods:{
			show() {
				this.avalilable = true
			},
			hidden() {
				this.avalilable = false
			}
		},
		computed:{
			getMaskColor() {
				let i = this.maskColor ? 0.5 : 0
				return `background-color: rgba(0,0,0,${i});`
			},
			atBottom() {
				let bottom = this.bottom ? ‘left-0 right-0 bottom-0‘ : ‘‘
				return bottom;
			}
		}
	}
</script>

  当我们点击扩展按钮时,就会出现下面效果

2. 当我们长按对话列表时,会出现操作的选项

  在会话列表组件下,调用长按事件longpress

<div class="flex align-center justify-between" @click="onClick" @longpress="long">

  计算出长按的位置x,y

  小程序端和nvue端获取位置的方式不同,需要判断

  计算出x,y后,将位置传给父组件

long(e) {
	// console.log(e)
    let x = 0
    let y = 0

	// #ifdef APP-PLUS-NVUE
	x = e.changedTouches[0].screenX
	y = e.changedTouches[0].screenY

	// #endif
	// 如果是小程序端
	// #ifdef MP
	x = e.detail.x
	y = e.detail.y

	// #endif
	console.log(e)

	this.$emit(‘long‘, {x, y})
	}
},

  在index.vue中使用h-media-list组件, 绑定子组件传递的long事件

  调用弹出层组件中的show方法,传入x,y坐标即可实现效果

<!-- 聊天列表 -->
        <view class="flex flex-column">
            <block v-for="(item, index) in chatList" :key="index">
                <h-media-list :item="item" @long="long"></h-media-list>
            </block>
        </view>

<!-- 弹出层 -->
      <h-popup ref="popup">
        <view style="width: 200rpx;height: 300rpx;"></view>
      </h-popup>

  

long({x, y}) {
	this.$refs.popup.show(x, y)
}

  完成效果如下:

          

原文地址:https://www.cnblogs.com/zhanghaoblog/p/12228639.html

时间: 2024-08-27 14:45:01

4.弹出层组件的实现与封装的相关文章

javascript对话框(弹出层)组件

http://www.blueidea.com/download/product/2010/7513.asp#comment 1. 从头到尾对一遍<<Javascript高级程序设计>>,不懂的地方可以暂时掠过,给自己对javascript有一个大体的印象2. 认认真真的读完这本书:<<编写可维护的javascript>>,从编码规范,技巧,模式,等各个方面深入体会javascript3. 重新读一遍<<Javascript高级程序设计>&

React native 的弹出层组件使用

组件名称:Alert.AlertIOS  具体代码如下 /*弹出层测试*/ import React,{Component} from 'react'; import {   StyleSheet,   View,   Image,   Text,   TouchableOpacity,   ScrollView,   Navigator,   Alert, //引入Alert组件   TouchableHighlight,   AlertIOS  //引入AlertIOS组件 } from '

原生Js弹窗插件|web弹出层组件|对话框

wcPop.js 是一款基于原生javascript开发的前端 web版 弹窗组件,遵循原生 H5/css3/JS 的书写规范,简单实用.拿来即用(压缩后仅10KB).已经兼容各大主流浏览器.内含多种弹窗类型(普通型弹窗.仿微信|android|ios弹窗.定位弹窗.全屏弹窗),多种动画展示效果,可以让您的网页对话框千变万化. ◆ 一睹风采 ◆ 在页面只需引入wcPop.js即可: <script src="wcPop.js"></script> ◆ API调用

弹出层组件

*{margin:0;padding:0} #tinymask{ position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 1500; background-color:#000; opacity:0; display:none; } #tinybox{ display:none; background-color:#fff; padding:10px; z-index: 1600; } 111111

微信小程序 - 弹出层组件

需要的可以下载示例:maskalert 原文地址:https://www.cnblogs.com/cisum/p/10421741.html

关于弹出层的拖拽,封装

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } html{ height: 100%; } body{ width: 100%; height: 100%; position: relative

组件--弹出层

<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>Examples</title><meta name="description" content=&qu

JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

JavaScript学习总结(一)--延迟对象.跨域.模板引擎.弹出层.AJAX示例 目录 一.AJAX示例 1.1.优点 1.2.缺点 1.3.jQuery AJAX示例 二.延迟对象(Deferred) 2.1.回调函数 2.2.deferred.done 三.跨域 3.1.什么是跨域 3.2.JSONP跨域 3.3.jQuery使用JSONP跨域 3.4.跨域资源共享(CORS) 3.5.小结 四.弹出层 五.模板引擎 5.1.Hello World 5.2.方法 5.3.与AJAX结合应

自己封装的弹出层插件

html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="