index.jsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React, { Component } from "react";
  2. import styles from "./index.less";
  3. import NewPortal from './NewPortal'
  4. import close from "./../img/close.png";
  5. import $ from "jquery";
  6. class DetailsModal extends Component {
  7. constructor(props) {
  8. super(props);
  9. this.state = {
  10. currentIndex: 0
  11. }
  12. this.hideTips = this.hideTips.bind(this)
  13. }
  14. hideTips() {
  15. const { hideTips } = this.props;
  16. hideTips && hideTips();
  17. }
  18. handleClickMenu(index, item, tipsDetails) {
  19. const that = this
  20. setTimeout(function(){
  21. that.setState({
  22. currentIndex: index
  23. })
  24. },0)
  25. let scrollTop = 0
  26. tipsDetails.introduceDetailList.map((it, ii) => {
  27. if( ii < index) {
  28. scrollTop = scrollTop + parseInt($('#' + it.title).css('height'))
  29. }
  30. })
  31. $('#detailsContent').scrollTop(scrollTop)
  32. }
  33. handleScrollModal(tipsDetails) {
  34. const scrollTop = $('#detailsContent').scrollTop()
  35. let divHeight = 0;
  36. for (let i = 0; i < tipsDetails.introduceDetailList.length; i++) {
  37. divHeight = divHeight + parseInt($('#' + tipsDetails.introduceDetailList[i].title).css('height'))
  38. if(divHeight > scrollTop) {
  39. this.setState({
  40. currentIndex: i
  41. })
  42. return
  43. }
  44. }
  45. }
  46. render() {
  47. const {showTipsDetails, tipsDetails} = this.props;
  48. const { currentIndex } = this.state
  49. const imageUrlPrefix = 'http://192.168.2.241:82'; //图片服务器地址
  50. return (<NewPortal visible={showTipsDetails}>
  51. <div className={styles['details-wrapper']}>
  52. <div className={styles['details-content-wrapper']}>
  53. <h1 className={styles['details-content-name']} >{tipsDetails && tipsDetails.name} <img className={styles['details-close']} onClick={this.hideTips} src={close} /></h1>
  54. <div className={styles['details-content']} id= 'detailsContent' onScroll={this.handleScrollModal.bind(this, tipsDetails)}>
  55. {tipsDetails && tipsDetails.introduceDetailList && tipsDetails.introduceDetailList.map((item, index) => {
  56. return (<div id={item.title}>
  57. <div className={styles['details-content-title-box']} >
  58. <span className={styles['details-content-title-name']}>{item.title}</span>
  59. <div className={styles['details-content-title-line']}></div>
  60. </div>
  61. <div dangerouslySetInnerHTML ={{__html: item.content.replace(/{imageUrlPrefix}/g, imageUrlPrefix)}}></div>
  62. </div>)
  63. })}
  64. </div>
  65. <div className={styles['content-menu-box']}>
  66. <div className={styles['content-menu']}>
  67. {tipsDetails && tipsDetails.introduceDetailList && tipsDetails.introduceDetailList.map((item, index) => {
  68. return (<div>
  69. <div className={styles['details-menu-title-box']}>
  70. {index === 0 ? '' : <div className={styles['details-content-menu-line']}></div>}
  71. <span onClick={this.handleClickMenu.bind(this, index, item, tipsDetails)} className={styles['details-content-menu-name']} style = {index === currentIndex ? {color:'#0089be'} : ''}>
  72. <span className={styles['details-content-menu-circle']} style = {index === currentIndex ? {background:'#0089be'} : ''}></span>{item.title}
  73. </span>
  74. </div>
  75. </div>)
  76. })}
  77. </div>
  78. </div>
  79. </div>
  80. <div className={styles['details-mask']} onClick={this.hideTips}>
  81. </div>
  82. </div>
  83. </NewPortal>)
  84. }
  85. }
  86. export default DetailsModal;