1) 여러 개의 별표로 구성하는 것이 가장 좋습니다. 사용자는 별표를 마우스로 클릭하기만 하면 투표할 수 있습니다2) 투표 안 함, 투표 투표 완료 후 스타 스타일이 달라짐
2) Jquery의 addClass 및 RemoveClass를 통해 이 메소드는 별의 스타일을 동적으로 조정할 수 있습니다. 점수를 매길 때 마우스가 한 번에 별 쪽으로 이동할 때 주목할 가치가 있습니다. 특정 위치에 있는 별의 스타일을 추가해야 합니다. Jquery의 prevAll()을 사용하여 현재 위치 이전의 별을 가져온 다음 add($(this))를 사용하여 현재 위치에 있는 별의 참조를 가져올 수 있습니다. .
4) 대상 영역 자식 노드에서 선택된 별의 위치 1을 기준으로 점수를 생성합니다. children().index($( this)) 그런 다음 점수는 ajax를 통해 서버와 상호 작용하여 반환됩니다. 그런 다음 대상 영역의 내용을 지우고
배경 이미지를 별 이미지로 설정한 후 가로 위치에 따라 조정할 수 있습니다. *평균 점수에 따라
의 최종 너비가 결정되며 animate를 사용하여 애니메이션 효과를 얻습니다.
편의상 세미 플러그인 형태로 만들었습니다. 그래도 AJAX 상호 작용을 위한 로직은 다음과 같습니다
(function ($) {
$.fn.Rate = function (options) {
options = options || {};
var StarTip = options.StarTip || ['볼 가치가 없음', '보통', '신뢰할 수 있는 정보', '매우 도움이 됨', '훌륭한 정보']; >var ItemAmount | ItemAmount | 5;
var UnRateClassName || 'star';
var RateClassName = 'star_on'; || 'OriginalState';
var PostURL = options.PostURL ||
var DoAfterPost = options.DoAfterPost || function ()
var userID || ;
var messageID = options .messageID ||
var content = $(this)
var starList = ''
for (var i = 0; i < ItemAmount; i ) {
starList = ['
'].join ('');
}
content.empty().append(starList).find('a').hover(function () {
$(this).prevAll().add( $(this)).addClass( RateClassName);
}, function () {
$(this).prevAll().add($(this)).removeClass(RateClassName)
}) .one('click', function () {
var Score =parseInt(content.children().index($(this))) 1;
$.ajax({
type: "POST ",
url: PostURL ,
data: "{messageID:" messageID ",userID:" userID ",Score:" 점수 "}",
contentType: "application/json; 8",
dataType: "json",
success: function (msg) {
var result = (jQuery.parseJSON(msg.d)).SuccessFlag;
DoAfterPost(result);
content.empty().removeClass();
$('
').addClass(originalStateClassName).prependTo(content).animate({ 'width': 16 * 결과 'px', '불투명도': 1 }, '느림');
})
}); );
参数说明:
参数名称 |
描述 |
默认值 |
参数类型 |
StarTip |
鼠标移到星星上的文本提示 |
['不值一看', '平平无奇', '信息靠谱', '对我很有帮助', '极品信息'] |
javascript数组 [tip]:数组元素个数必须要和星星个数一致 |
ItemAmount |
星星的个数 |
5 |
数字 |
UnRateClassName |
还没投票时星星的样式名称 |
'star' |
字符串 |
RateClassName |
投票中,鼠标移过时星星的样式 |
'star_on' |
字符串 |
originalStateClassName |
投票完成后,结果展示时星星的样式 |
'OriginalState' |
字符串 |
PostURL |
ajax交互时,url参数 |
'' |
字符串 |
DoAfterPost |
投票完成后,在投票页面使用自定义方法 |
'' |
字符串 |
userID |
ajax交互时用户ID,防止重复投票 |
'' |
数字 |
messageID |
ajax交互时文章ID |
'' |
数字 |
2) 프론트엔드 참조 코드
$( '#왼쪽 테이블 tr :eq(1) td:eq(0) #StarRate').Rate({
PostURL: 'http://www.cnblogs.com/ServiceProvider/MessageInfoService.asmx/VoteMessage',
userID: UserID ,
messageID: messageID,
DoAfterPost: function (data) {
if (data > 0) {
$(voteResultContext).html(data); }
else {
ProcessNoticeShow('이미 투표하셨습니다');
}
}
})
}
4) 스타일 시트
.star{ height:16px; 16px; 부동:왼쪽; 배경:url(../images/star.gif) 반복 없음 0 0;}
.star_on{ 배경: url(../images/star.gif) 반복 없음 0 - 32px !important;}
.OriginalState{ 너비:0px;배경: url(../images/star.gif) 반복-x 0 -16px !important;opacity:0;height:16px; 디스플레이:블록;}
3) 서버측 코드
/// < ;summary>
/// 메시지에 투표하세요. 0보다 큰 반환 값은 성공을 의미합니다.
/// /// < ;param name="messageID">메시지 ID< /param>
///
UserID///
Score
///
[WebMethod]
공개 문자열 VoteMessage(int messageID, int userID ,int Score)
{
SQLCMD = new SqlCommand("MessageInfo_Add_VoteUsefull_MessageIDUserID", SQLConnect);
SQLCMD.CommandType = CommandType.StoredProcedure;
SQLCMD.Parameters.Add(new SqlParameter("@messageID",SqlDbType.Int)); SQLCMD.Parameters["@messageID"].값 = messageID;
SQLCMD.Parameters.Add(new SqlParameter("@userID",SqlDbType.Int))
SQLCMD.Parameters["@userID"]. Value = userID;
SQLCMD.Parameters .Add(new SqlParameter("@Score", SqlDbType.Int))
SQLCMD.Parameters["@Score"].Value = Score
float SuccessFlag; basicSQLAccess.ExeScalarReturnValueFloat(SQLCMD);
Hashtable HTFlag = new Hashtable();
HTFlag.Add("SuccessFlag", SuccessFlag)
return JsonConvert.SerializeObject(HTFlag);
JsonConvert.SerializeObject 정보 프런트 엔드 Jquery와의 상호 작용 및 콘텐츠에 대한 소개는 이전 기사
을 참조하세요.
4:
다운로드 CSS, JS 및 별 이미지가 포함된 압축 패키지
다운로드하려면 클릭하세요