uni-app学习:5、样式设置和事件简单说明

好久不见. 提交于 2020-02-28 08:41:39

居家隔离14-1

继续年前的学习总结

class 支持的语法:

<view :class="{ active: isActive }">111</view>
<view class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">222</view
<view class="static" :class="[activeClass, errorClass]">333</view>
<view class="static" v-bind:class="[isActive ? activeClass : '', errorClass]">444</view>
<view class="static" v-bind:class="[{ active: isActive }, errorClass]">555</view>

style 支持的语法:

<view v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">666</view>
<view v-bind:style="[{ color: activeColor, fontSize: fontSize + 'px' }]">777</view>

不支持 Vue官方文档:Class 与 Style 绑定 中的 classObject 和 styleObject 语法。此外还可以用 computed 方法生成 class 或者 style 字符串,插入到页面中,举例说明:

<template>
    <!-- 支持 -->
    <view class="container" :class="computedClassStr"></view>
    <view class="container" :class="{active: isActive}"></view>
    <!-- 不支持 -->
    <view class="container" :class="computedClassObject"></view>
</template>

外部CSS引入

第一种方法:放在<script>标签里里的写法

<script>import '../static/style/reset.css'</script>

注意:要放在<script>标签里引入才生效,放在<style>标签内还不行,很奇怪。。。。

我用的是这种

<script>
    import './css.css'
    export default {
        data() {
            return {};
        }
    }
</script>

第二种方法:放在<style>标签里的写法

<style>

@import url("index.css");

</style>

下面是两张方法一起用的实例,两种方式引入的CSS都可以生效!~大家看着哪个顺眼就用哪个吧

<template>
    <view>
        <text class="css1">测试文本1111</text><br>
        <text class="css2">测试文本2222</text>
    </view>
</template>
<script>
    import './css1.css'
    export default {
        data() {
            return {};
        }
    }
</script>
<style>
    @import url("./css2.css");
</style>

样例实测

<template>
	<view class="content">
		这里是类别
		<scroll-view class="menus">
			<view v-for="(menu, index) in menus" :id="'view'+index" :class="[index == currentIndex ? 'menuActive' : '']" @click="selword(index)"
			 @tap="seltag">{{menu}}
			 <view id="test123" style="width: 50px;background-color: #0000FF;" ></view>
			 </view>
		</scroll-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '这里是分类信息页面....',
				currentIndex: 0,
				menus: [
					'新闻0', '汽车0', '读书0',
					'新闻1', '汽车1', '读书1',
					'新闻2', '汽车2', '读书2',
					'新闻3', '汽车3', '读书3',
				]
			}
		},
		onLoad: function(options) {
			console.log("onLoad");
		},
		onHide: function() {
			console.log("onHide");
		},
		onShow: function() {
			console.log("onShow");
		},
		methods: {
			selword: function(item) {
				// console.log('点击index=' + item);
				this.currentIndex = item;
			},
			seltag:function(e){
				console.log('当前点击='+e.currentTarget.id);	
				// 推荐使用 e.currentTarget 这个更准
				
				console.log('点击='+e.target.id);
			}
		}
	}
</script>

<style>
	.content {
		text-align: center;
		height: 400upx;
	}

	.logo {
		height: 200upx;
		width: 200upx;
		margin-top: 200upx;
	}

	.title {
		font-size: 36upx;
		color: #0000ff;
	}

	.menus {
		width: 100%;
		margin: 0 auto;
		padding: 20px 0px;
	}

	.menus view {
		padding: 18px;
		line-height: 20px;
		font: 16px;
		float: left;
	}

	.menuActive {
		color: #900;
		font-size: 36px;
	}
</style>

效果:

 

事件说明:

事件映射表,左侧为 WEB 事件,右侧为 ``uni-app`` 对应事件

{
    click: 'tap',
    touchstart: 'touchstart',    点击开始
    touchmove: 'touchmove',      移动  
    touchcancel: 'touchcancel',  取消
    touchend: 'touchend',        点击结束
    tap: 'tap',
    longtap: 'longtap',          长按
    input: 'input',
    change: 'change',
    submit: 'submit',
    blur: 'blur',
    focus: 'focus',
    reset: 'reset',
    confirm: 'confirm',
    columnchange: 'columnchange',
    linechange: 'linechange',
    error: 'error',
    scrolltoupper: 'scrolltoupper',
    scrolltolower: 'scrolltolower',
    scroll: 'scroll'

}

在 input 和 textarea 中 change 事件会被转为 blur 事件。

踩坑注意(PS 这部分还么有测试实践过):

上列表中没有的原生事件也可以使用,例如map组件的regionchange 事件直接在组件上写成 @regionchange,同时这个事件也非常特殊,它的 event type 有 begin 和 end 两个,导致我们无法在handleProxy 中区分到底是什么事件,所以你在监听此类事件的时候同时监听事件名和事件类型既 <map @regionchange="functionName" @end="functionName" @begin="functionName"><map>
平台差异所致,bind 和 catch 事件同时绑定时候,只会触发 bind ,catch 不会被触发,要避免踩坑。
事件修饰符

stop 的使用会阻止冒泡,但是同时绑定了一个非冒泡事件,会导致该元素上的 catchEventName 失效!
prevent 可以直接干掉,因为uni-app里没有什么默认事件,比如 submit 并不会跳转页面
self 没有可以判断的标识
once 也不能做,因为uni-app没有 removeEventListener, 虽然可以直接在 handleProxy 中处理,但非常的不优雅,违背了原意,暂不考虑
按键修饰符:uni-app运行在手机端,没有键盘事件,所以不支持按键修饰符

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!