iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >ExtJS(3)- 自定义组件(星级评分
  • 584
分享到

ExtJS(3)- 自定义组件(星级评分

星级自定义组件 2023-01-31 03:01:01 584人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

    今天介绍Extjs的组件开发,这里以星级评分为示例,首先来看看效果图:    然后是功能操作:鼠标移动到五个星星上面时,会有tooltip显示当前的分值。如图:鼠标悬停在第四颗星星时前四颗星星显示高亮笑脸,当点击下去时锁定笑脸并且设

    今天介绍Extjs的组件开发,这里以星级评分为示例,首先来看看效果图:

wKioL1Q_hM_Q7eyeAAC2_zwl99c585.jpg

    然后是功能操作:鼠标移动到五个星星上面时,会有tooltip显示当前的分值。如图:鼠标悬停在第四颗星星时前四颗星星显示高亮笑脸,当点击下去时定笑脸并且设定份数为4。

    然后我们来说一下实现原理,Ext的组件基本单元是Ext.Component,所以自定义组件可以继承Component,然后显示部分直接用html来显示,包括CSS和动态事件都可以直接在html上编辑添加。

    接下来我们来看代码:

Ext.define('Pactera.widget.StarRating', {
	alias:"widget.starRating",
	extend: 'Ext.Component',
	
	afterRender:function(){
		 this.callParent();
	},
	
	//label: 'score',//
	//labelWidth: 60,
	//lableAlign:'right',//left,center,right
	//aMsg: [], 
	
	
	width: 275,
    height: 50,
    padding: 10,
    style: {
        color: '#000000',
        backgroundColor:'#FFFFFF'
    },
	initComponent: function(){
		var me = this;
		var date = new Date();
		var dateTime = date.getTime();
		var starId = me.id?"star_"+me.id:"star"+dateTime;
		
		var label = me.label?me.label:'评分';
		var labelWidth = me.labelWidth?me.labelWidth-13:87;
		var labelAlign = me.lableAlign?me.lableAlign:'right';
		var thisWidth = me.width?me.width:130;
		var aMsg = [
			"Unacceptable|Unacceptable",
			"Poor|Poor",
			"Fair|Fair",
			"Good|Good",
			"excellent|Excellent"
			]
		if(me.aMsg){
			aMsg = me.aMsg;
		}
		
		var html = '<div id="'+ starId +'" class="star" style="width:'+thisWidth+'px;">'
		+ '<span style="width:'+labelWidth+'px;text-align:'+labelAlign+'" >'+ label + '</span>'
		+ '<span>:</span>'
	    + 	'<ul>'
	    +    	'<li><a href="javascript:;">1</a></li>'
	    +    	'<li><a href="javascript:;">2</a></li>'
	    +    	'<li><a href="javascript:;">3</a></li>'
	    +    	'<li><a href="javascript:;">4</a></li>'
	    +    	'<li><a href="javascript:;">5</a></li>'
	    +	'</ul>'
	    +'<span></span>'
	    +'<p></p>'
		+'</div>'
		this.html = html;
		this.listeners = {
			'boxready':function(){
				var oStar = document.getElementById(starId);
				var aLi = oStar.getElementsByTagName("li");
				var oUl = oStar.getElementsByTagName("ul")[0];
				var oSpan = oStar.getElementsByTagName("span")[1];
				var oP = oStar.getElementsByTagName("p")[0];
				var i = iScore = me.iStar = 0;
				
				for (i = 1; i <= aLi.length; i++)
				{
					aLi[i - 1].index = i;
					//鼠标移过显示分数
					aLi[i - 1].onmouseover = function ()
					{
						fnPoint(this.index);
						//浮动层显示
						oP.style.display = "block";
						//计算浮动层位置
						oP.style.left = oUl.offsetLeft + this.index * this.offsetWidth - 104 + "px";
						//匹配浮动层文字内容
						oP.innerHTML = "<em><b>" + this.index + "</b> " + aMsg[this.index - 1].match(/(.+)\|/)[1] + "</em>" + aMsg[this.index - 1].match(/\|(.+)/)[1]
					};
					//鼠标离开后恢复上次评分
					aLi[i - 1].onmouseout = function ()
					{
						fnPoint();
						//关闭浮动层
						oP.style.display = "none"
					};
					//点击后进行评分处理
					aLi[i - 1].onclick = function ()
					{
						me.iStar = this.index;
						oP.style.display = "none";
						//oSpan.innerHTML = "<strong>" + (this.index) + " 分</strong> (" + aMsg[this.index - 1].match(/\|(.+)/)[1] + ")"
						me.value = this.index;
					}
				}
				//评分处理
				function fnPoint(iArg)
				{
					//分数赋值
					iScore = iArg || me.iStar;
					for (i = 0; i < aLi.length; i++) aLi[i].className = i < iScore ? "on" : "";	
				}
				
				var setValue = function(score){
					me.iStar =  score;
					fnPoint(score);
				}
				
				me.setValue = setValue;
			}
		}
		
		this.callParent();
		
	}
	
	
});

    css样式代码:

.star ul{list-style-type:none;}
.star{position:relative;margin:0px auto;}
.star ul,.star span{float:left;display:inline;height:19px;line-height:19px;}
.star ul{margin:0 10px;padding-start: 0px;-WEBkit-padding-start: 0px;-moz-padding-start: 0px;}
.star li{float:left;width:24px;cursor:pointer;text-indent:-9999px;background:url(Http://sandbox.runjs.cn/uploads/rs/285/beoxl0jq/star.png) no-repeat;}
.star strong{color:#f60;padding-left:10px;}
.star li.on{background-position:0 -28px;}
.star p{position:absolute;top:20px;width:179px;height:67px;display:none; background:url(./p_w_picpath/tooltipbg.gif) no-repeat; z-index:100000;padding:7px 10px 0;}
.star p em{color:#f60;display:block;font-style:nORMal;}

    下面是调用代码:

var starRating = Ext.create('Pactera.widget.StarRating',{
    label:'Is it a good question?',
    width:450,
    labelWidth:250,
    name:'starRating'
});

    下面说几个注意点:

    1、动态响应事件必须要写在boxready之内,因为我们操作的对象是document,所以必须在页面渲染生成document以后。

    2、因为是评分组件,就会有读和写,读的话就是选中星级后读取几星,这里我们设定的直接是value,而写我们设定了setValue()方法,所以在form表单加载时,该组件就可以直接加载到该分数的样式。

    3、tooltip的内容同样是可以自定义的,我们只要在实例化该组件时传入参数便可以自定义tooltip提示。


    系统开发中肯定会有各种各样的组件,而我们只要发挥想象,都能够将这些功能组件模块化,从而达到共用。

--结束END--

本文标题: ExtJS(3)- 自定义组件(星级评分

本文链接: https://www.lsjlt.com/news/187595.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ExtJS(3)- 自定义组件(星级评分
        今天介绍ExtJS的组件开发,这里以星级评分为示例,首先来看看效果图:    然后是功能操作:鼠标移动到五个星星上面时,会有tooltip显示当前的分值。如图:鼠标悬停在第四颗星星时前四颗星星显示高亮笑脸,当点击下去时锁定笑脸并且设...
    99+
    2023-01-31
    星级 自定义 组件
  • Android自定义星星评分控件
    下面为控件的实现历程: 此控件高效,直接使用ondraw绘制,先亮照: 由于Android自身的星星评分控件样式可以改,但是他的大小不好调整的缺点,只能用small n...
    99+
    2022-06-06
    Android
  • Android控件之RatingBar自定义星级评分样式
    一、RatingBar简单介绍 RatingBar是基于SeekBar(拖动条)和ProgressBar(状态条)的扩展,用星形来显示等级评定,在使用默认RatingBar时,...
    99+
    2022-06-06
    Android
  • Android UI控件RatingBar实现自定义星星评分效果
    本文实例为大家分享了Android RatingBar星星评分效果的具体代码,供大家参考,具体内容如下 继承关系 AppCompatRatingBar 效果图 xml ...
    99+
    2022-06-06
    自定义 Android
  • Android自定义View之自定义评价打分控件RatingBar实现自定义星星大小和间距
    在Android开发中,我们经常会用到对商家或者商品的评价,运用星星进行打分。然而在Android系统中自带的打分控件,RatingBar特别不好用,间距和大小无法改变。所以,...
    99+
    2022-06-06
    view Android
  • Android如何自定义评分控件
    今天小编给大家分享一下Android如何自定义评分控件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。自定义参数为了方便扩展,...
    99+
    2023-06-30
  • Android中怎么自定义组件卫星菜单
    Android中怎么自定义组件卫星菜单,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先如果要想自定义组件 那么第一件事就是赋予自定义组件的属性,从效果图上看出,该组件可以...
    99+
    2023-05-31
    android
  • Android自定义评分控件的完整实例
    目录前言自定义参数解析参数绘制事件处理评分监听外部使用总结前言 无意中翻到几年前写过的一个RatingBar,可以拖拽,支持自定义星星图片,间距大小等参数。 自定义参数 为了...
    99+
    2022-06-07
    Android
  • Angular2如何自定义分页组件
    这篇文章主要介绍了Angular2如何自定义分页组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在项目中,前端传给后台的参数有:pageS...
    99+
    2022-10-19
  • AntDesignVuetable组件如何自定义分页器
    目录Ant Design Vue table组件自定义分页器使用Ant Design Vue的Table组件,解决点击任意内容详情,点击返回分页器页数默认回到第一页问题描述解决方法总...
    99+
    2023-05-16
    Ant Design Vue Ant Design Vue table组件 table组件自定义分页器
  • angular4自定义组件的示例分析
    这篇文章主要为大家展示了“angular4自定义组件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular4自定义组件的示例分析”这篇文章吧。在...
    99+
    2022-10-19
  • Vue组件中的自定义事件源码分析
    这篇文章主要介绍“Vue组件中的自定义事件源码分析”,在日常操作中,相信很多人在Vue组件中的自定义事件源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue组件中的自定义事件源码分析”的疑惑有所帮助!...
    99+
    2023-06-29
  • Android编程中自定义组件的示例分析
    这篇文章主要介绍了Android编程中自定义组件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Android是什么Android是一种基于Linux内核的自由及开放...
    99+
    2023-05-31
    android
  • Element-ui tree组件自定义节点的示例分析
    这篇文章将为大家详细讲解有关Element-ui tree组件自定义节点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。工作上使用到element-ui tree...
    99+
    2022-10-19
  • Android自定义控件之组合控件学习笔记分享
    我们来讲一下自定义组合控件,相信大家也接触过自定义组合控件吧,话不多说,直接干(哈~哈~): 大家看到这个觉得这不是很简单的吗,这不就是写个布局文件就搞定嘛,没错,确实直接上...
    99+
    2022-06-06
    学习笔记 学习 Android
  • vue封装自定义分页器组件与使用方法分享
    前言 分页是开发各种系统时候最常用的功能,下面为本人封装的一个分页组件。 实现分页器操作需要以下参数 当前页: pageNo每页展示条数: pageSize数据总条数 : total...
    99+
    2022-11-12
  • Vue Element UI自定义描述列表组件的示例分析
    这篇文章主要介绍Vue Element UI自定义描述列表组件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下效果图写在前面写后台管理经常从列表点击查看详情,展示数据信息,Element UI虽然...
    99+
    2023-06-15
  • vue封装自定义分页器组件与使用方法是什么
    这篇文章给大家介绍vue封装自定义分页器组件与使用方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言分页是开发各种系统时候最常用的功能,下面为本人封装的一个分页组件。实现分页器操作需要以下参数当前页: pag...
    99+
    2023-06-26
  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享
    如果想在自定义的View上面显示Button 等View组件需要完成如下任务   1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 代码如下:  public cl...
    99+
    2022-06-06
    view 方法 framelayout Android
  • vue组件开发之用户无限添加自定义填写表单的示例分析
    这篇文章主要介绍了vue组件开发之用户无限添加自定义填写表单的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图:代码如下:<...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作