jQuery SVG vs. Raphael [ปิด]


254

ผมทำงานเกี่ยวกับอินเตอร์เฟซแบบโต้ตอบโดยใช้ SVG และ JavaScript / jQuery และฉันพยายามที่จะตัดสินใจระหว่างราฟาเอลและjQuery SVG ฉันอยากรู้

  1. การแลกเปลี่ยนระหว่างกันเป็นอย่างไร
  2. จุดที่การพัฒนาดูเหมือนจะเป็น

ฉันไม่ต้องการการสนับสนุน VML / IE ใน Raphael หรือความสามารถในการพล็อตของ jQuery SVG ฉันสนใจหลักในวิธีที่สง่างามที่สุดในการสร้างเคลื่อนไหวและจัดการแต่ละรายการบนผืนผ้าใบ SVG

คำตอบ:


194

ฉันเพิ่งใช้ทั้ง Raphael และ jQuery SVG - และนี่คือความคิดของฉัน:

ราฟาเอล

ข้อดี:ห้องสมุดเริ่มต้นที่ดีสามารถทำสิ่งต่าง ๆ มากมายกับ SVG ได้อย่างรวดเร็ว เขียนได้ดีและมีเอกสาร ตัวอย่างและการสาธิตมากมาย สถาปัตยกรรมที่ขยายได้มาก ยอดเยี่ยมกับภาพเคลื่อนไหว

ข้อด้อย:เป็นเลเยอร์เหนือมาร์กอัป SVG จริงทำให้ยากที่จะทำสิ่งที่ซับซ้อนมากขึ้นด้วย SVG - เช่นการจัดกลุ่ม (รองรับชุด แต่ไม่ใช่กลุ่ม) ใช้งานไม่ได้ดีกับการแก้ไของค์ประกอบที่มีอยู่แล้ว

jQuery SVG

ข้อดี:ปลั๊กอิน jquery หากคุณใช้ jQuery อยู่แล้ว เขียนได้ดีและมีเอกสาร ตัวอย่างและตัวอย่างจำนวนมาก รองรับองค์ประกอบ SVG ส่วนใหญ่ช่วยให้เข้าถึงองค์ประกอบได้อย่างง่ายดาย

ข้อด้อย:สถาปัตยกรรมไม่สามารถขยายได้เหมือนกับราฟาเอล บางสิ่งอาจมีการจัดทำเป็นเอกสารที่ดีขึ้น (เช่นกำหนดค่าองค์ประกอบ SVG) ใช้งานไม่ได้ดีกับการแก้ไของค์ประกอบที่มีอยู่แล้ว อาศัยความหมาย SVG สำหรับแอนิเมชั่นซึ่งไม่ค่อยดีนัก

SnapSVGเป็น Raphael เวอร์ชั่น SVG แท้ๆ

SnapSVG เป็นผู้สืบทอดของ Raphael รองรับเฉพาะในเบราว์เซอร์ที่เปิดใช้งาน SVG และรองรับคุณสมบัติเกือบทั้งหมดของ SVG

ข้อสรุป

หากคุณกำลังทำอะไรที่รวดเร็วและง่ายดายกราฟิลส์เป็นตัวเลือกที่ง่าย หากคุณกำลังจะทำอะไรที่ซับซ้อนกว่านี้ฉันเลือกใช้ jQuery SVG เพราะฉันสามารถจัดการมาร์กอัพจริงได้ง่ายกว่าราฟาเอลอย่างมาก และหากคุณต้องการโซลูชันที่ไม่ใช่ jQuery SnapSVG เป็นตัวเลือกที่ดี


15
เอกสารของ RaphaelJS นั้นยอดเยี่ยม แต่ก็มีข้อ จำกัด และบางครั้งคุณต้องเข้าสู่เอกสาร SVG หรือ jQuery เพื่อรับข้อมูลทั้งหมด ที่กล่าวว่าด้วยการสาธิต (ซอร์สโค้ด) ที่มีอยู่เช่นเดียวกับฟอรัมและผู้ใช้หลายคนฉันจัดการเพื่อรับคำตอบที่ต้องการ
Roalt

11
ฉันเพิ่งเริ่มใช้ราฟาเอลและพบว่าเอกสารดังกล่าวเป็นสิ่งที่ดีที่สุดที่ฉันได้พบเจอกับจาวาสคริปต์ API ด้วยตัวอย่างที่ชัดเจนมากถัดจากข้อกำหนดที่เป็นทางการมากขึ้น
wheresrhys

71
อย่าลืมว่า RaphaelJS มีความเข้ากันได้ย้อนหลังกับ VML สำหรับ Internet Explorer นั่นเป็นเรื่องใหญ่เพราะ SVG ไม่ทำงานบนเบราว์เซอร์รุ่นเก่า
Strongriley

3
คำถามเกี่ยวกับ SVG โดยเฉพาะไม่ใช่ความเข้ากันได้ย้อนหลัง ถ้าปรารถนาคือกราฟิกแบบเวกเตอร์ข้ามเบราว์เซอร์แสดงว่าคุณถูกต้อง
Anatoly G

4
jQuery SVG แย้งอีกอย่างคือโครงการแม้ว่าโครงการจะเป็น opensoucer (GPL และ MIT) ดูเหมือนว่านักพัฒนาจะถูกทอดทิ้ง (รุ่น 1.4.5 อัปเดตล่าสุด 28 เมษายน 2012) jquery.svg.dom ทำให้เกิดข้อขัดแย้งกับ jQuery 1.8 เป็นการดีที่ฉันจะรอให้ใครสักคนเข้าร่วมในโครงการและหวังว่าจะนำมันเข้าสู่ GitHub
Hoffmann

53

สำหรับคนรุ่นหลังฉันต้องการทราบว่าฉันเลือกราฟาเอลเนื่องจาก API ที่สะอาดและการสนับสนุน IE ที่ "ฟรี" และเพราะการพัฒนาที่ใช้งานอยู่นั้นดูมีแนวโน้ม (เช่นการสนับสนุนกิจกรรมถูกเพิ่มใน 0.7 เช่น) อย่างไรก็ตามฉันจะทิ้งคำถามที่ยังไม่ได้ตอบและฉันยังสนใจที่จะได้ยินเกี่ยวกับประสบการณ์ของผู้อื่นโดยใช้ห้องสมุด Javascript + SVG


1
การสนับสนุน IE ที่ดีสำหรับ Raphael นั้นยอดเยี่ยม สี่เหลี่ยมที่มีมุมโค้งมนใน IE ... ไม่มีปัญหา;)?
ปีเตอร์ Ajtai

26

ฉันเป็นแฟนตัวยงของราฟาเอลและแรงผลักดันในการพัฒนาดูเหมือนจะแข็งแกร่ง (เวอร์ชั่น 0.85 ออกวางจำหน่ายเมื่อปลายสัปดาห์ที่แล้ว) อีกบวกใหญ่คือการที่นักพัฒนาของDmitry Baranovskiyในปัจจุบันคือการทำงานในการสร้างแผนภูมิราฟาเอลปลั๊กอินg.raphaelซึ่งมีลักษณะเหมือนการสร้างมันขึ้นมาเป็นเนียนสวย (มีเพียงบางตัวอย่างของการส่งออกจากรุ่นแรกบนFlickr ) .

อย่างไรก็ตามเพื่อโยนคู่แข่งที่เป็นไปได้ลงในมิกซ์ไลบรารีSVG เว็บ SVGของ Google ดูมีความเป็นไปได้อย่างแน่นอน (แม้ว่าฉันไม่ใช่แฟนตัวยงของ Flash ซึ่งใช้เพื่อแสดงผลในเบราว์เซอร์ที่ไม่สอดคล้องกับ SVG) อาจเป็นหนึ่งในการรับชมโดยเฉพาะอย่างยิ่งกับการประชุม SVG Open ที่กำลังจะจัดขึ้น


1
มันคือ Raphael v. 1.5.2 ในขณะนี้
topright gamedev

3
ไม่ใช่เรื่องใหญ่ที่จะสังเกตว่าเวอร์ชั่นปัจจุบันคือ 2.1.2 ความคิดเห็นนี้กำลังรอที่จะได้รับการแก้ไขโดยคนอื่นในอีกไม่กี่ปี ...
Tebe

Kopat 'Sho Ya Nashel ไม่กี่ปีต่อมา ... มันเป็นกราฟิลส์ v2.2.1 ตอนนี้
Nathangrad

12

ราฟาเอลติดตั้งและเดินทางได้ง่ายขึ้นแน่นอน แต่โปรดทราบว่ามีวิธีการแสดงสิ่งต่าง ๆ ใน SVG ที่ไม่สามารถทำได้ในราฟาเอล ตามที่ระบุไว้ข้างต้นไม่มี "กลุ่ม" นี่ก็หมายความว่าคุณไม่สามารถใช้เลเยอร์การแปลงพิกัดด้วยกันได้ แต่จะมีการแปลงพิกัดเพียงชุดเดียวเท่านั้น

หากการออกแบบของคุณขึ้นอยู่กับการแปลงพิกัดที่ซ้อนกัน Raphael ไม่เหมาะสำหรับคุณ


11

โอ้ราฟาเอลก้าวต่อไปอย่างมีนัยสำคัญตั้งแต่เดือนมิถุนายน มีห้องสมุดการสร้างแผนภูมิใหม่ที่สามารถทำงานกับมันและสิ่งเหล่านี้เป็นที่สะดุดตามาก ราฟาเอลยังรองรับไวยากรณ์เส้นทาง SVG เต็มรูปแบบและได้รวมวิธีการเส้นทางขั้นสูงจริงๆ มาดูที่ 1.2.8+ ที่เว็บไซต์ของฉัน (ปลั๊กไร้ยางอาย) จากนั้นก็เด้งไปที่ไซต์ของ Dmitry จากตรงนั้น http://www.irunmywebsite.com/raphael/raphaelsource.html


6

ฉันคิดว่ามันไม่ได้ไม่เกี่ยวข้องกันโดยสิ้นเชิง แต่คุณคิดว่าผ้าใบหรือไม่ บางอย่างเช่นProcess JSสามารถทำให้ง่ายขึ้น


12
ฉันดูทั้งผ้าใบโดยทั่วไปและการประมวลผลโดยเฉพาะ ปัญหาคือว่าเหตุการณ์เมาส์ (เท่าที่ฉันรู้) ไม่สามารถแนบกับแต่ละรายการได้อย่างง่ายดายบนผืนผ้าใบสำหรับคุณสมบัติเช่นการลากและวางซึ่งแตกต่างจาก SVG ซึ่งสัมผัสกับ DOM อย่างสมบูรณ์
ลุคเดนนิส

1
ฉันยังไม่ได้ทำงานกับ Canvas อย่างกว้างขวาง แต่ลองดูที่ปลั๊กอิน Flot - jquery ที่ใช้ Canvas สำหรับแผนภูมิ มันจัดการกับ mouseclicks ได้ค่อนข้างดี
Bharani

4
Mouseclicks ใช่ แต่ไม่ใช่เหตุการณ์ในไอเท็มบนผืนผ้าใบ ในความเป็นจริงสำหรับ Canvas คุณไม่สามารถวางตัวจัดการเหตุการณ์ไว้บนผืนผ้าใบ (เนื่องจาก IE) แม้ว่าคุณจะสามารถวางลงบน div ที่เก็บผืนผ้าใบได้
Nosredna

3
canvas เหมาะสำหรับบิตแมป SVG เหมาะสำหรับกราฟิกแบบเวกเตอร์ ความสามารถของ SVG ในการปรับขนาดนั้นยอดเยี่ยมมากสำหรับเรื่องนั้น ฉันคิดว่า canvas และ SVG เป็นเทคโนโลยีเสริม
Anatoly G

เกี่ยวกับเหตุการณ์เมาส์สำหรับ Canvas ให้ดูที่ Easel.js ซึ่งจัดการทั้งหมดนี้ให้คุณ
Neil

6

คุณควรดูที่ svgweb ด้วย มันใช้แฟลชเพื่อแสดงผล svg ใน IE และเป็นทางเลือกในเบราว์เซอร์อื่น ๆ (ในกรณีที่รองรับมากกว่าที่เบราว์เซอร์เองทำ)

http://code.google.com/p/svgweb/


5

ฉันจะทิ้งการลงคะแนนของฉันไว้ที่ Raphael - การสนับสนุนข้ามเบราว์เซอร์, ล้าง API และอัปเดตที่สอดคล้องกัน มันเล่นได้ดีมากกับ jQuery ด้วย การประมวลผลนั้นยอดเยี่ยม แต่มีประโยชน์มากกว่าสำหรับการสาธิตสิ่งต่าง ๆ



5

สำหรับผู้ที่ไม่สนใจเกี่ยวกับ IE6 / IE7 คนเดียวที่เขียน Raphael สร้างเครื่องมือ svg สำหรับเบราว์เซอร์สมัยใหม่โดยเฉพาะ: Snap.svg .. พวกเขามีเว็บไซต์ที่ดีมากที่มีเอกสารที่ดี: http://snapsvg.io

snap.svg ไม่สามารถใช้งานได้ง่ายนอกกรอบและสามารถจัดการ / อัปเดต SVG ที่มีอยู่หรือสร้างใหม่ คุณสามารถอ่านสิ่งนี้ได้ใน snap.io เกี่ยวกับหน้า แต่นี่คือการเรียกใช้อย่างรวดเร็ว:

จุดด้อย

  • ในการใช้ประโยชน์จากคุณสมบัติของ snap คุณต้องสละการสนับสนุนสำหรับเบราว์เซอร์รุ่นเก่า Raphael รองรับเบราว์เซอร์เช่น IE6 / IE7 คุณสมบัติ snap ได้รับการสนับสนุนโดย IE9 ขึ้นไป, Safari, Chrome, Firefox และ Opera

ข้อดี

  • ใช้คุณสมบัติเต็มรูปแบบของ SVG เช่นการปิดบังการตัดรูปแบบการไล่ระดับสีแบบเต็มกลุ่มและอื่น ๆ

  • ความสามารถในการทำงานกับ SVG ที่มีอยู่: ไม่จำเป็นต้องสร้างเนื้อหาด้วย Snap เพื่อให้ทำงานกับ Snap ได้ช่วยให้คุณสร้างเนื้อหาด้วยเครื่องมือออกแบบทั่วไป

  • รองรับการเคลื่อนไหวโดยใช้ JavaScript API ที่ใช้งานง่ายตรงไปตรงมา

  • ทำงานร่วมกับสตริงของ SVG (ตัวอย่างเช่นไฟล์ SVG ที่โหลดผ่าน Ajax) โดยไม่ต้องสร้างมันขึ้นมาก่อนคล้ายกับคอนเทนเนอร์ของทรัพยากรหรือแผ่นงานสไปรต์

ตรวจสอบว่าคุณสนใจ: http://snapsvg.io


3

เนื่องจากยังไม่ได้กล่าวถึงที่นี่: คุณควรดูDojox.drawingซึ่งให้ความสามารถในการวาด SVG ที่ดี มันมีคุณสมบัติที่น่าประทับใจ ฉันเพิ่งเริ่มต้นโครงการด้วย แต่สำหรับฉันแล้วมันยอดเยี่ยมมาก (อย่างน้อยก็ในแง่ของฟีเจอร์) กับราฟาเอลและ JQuerySVG

งานนำเสนอนี้ทำให้ฉันเชื่อว่าจะใช้มันแทน Raphael / JQuerySVG: http://www.slideshare.net/elazutkin/dojo-gfx-svg-in-the-real-world-2114082

การอ้างอิง: http://dojotoolkit.org/reference-guide/dojox/index.html

การอ้างอิงเกี่ยวกับ Dojocampus: http://docs.dojocampus.org/dojox/drawing

ดาวน์โหลด Dojo (รวมถึง Dojox): http://dojotoolkit.org/download/



2

ฉันชอบที่จะใช้ RaphaelJS เพราะมันมีความสามารถข้ามเบราว์เซอร์ที่ยอดเยี่ยม อย่างไรก็ตามเอฟเฟกต์ SVG และ VML บางอย่างไม่สามารถทำได้ด้วย RaphaelJS (การไล่ระดับสีที่ซับซ้อน ... )

Google ได้พัฒนาห้องสมุดของตัวเองเพื่อเปิดใช้งานการสนับสนุน SVG ใน IE: http://svgweb.googlecode.com/files/svgweb-2009-08-20-B.zip


0

หากคุณไม่ต้องการการสนับสนุน VML และ IE8 ให้ใช้ Canvas (PaperJS เป็นต้น) ดูการสาธิต IE10 ล่าสุดสำหรับ Windows 7 พวกเขามีภาพเคลื่อนไหวที่น่าทึ่งใน Canvas SVG ไม่สามารถทำอะไรได้ใกล้กับพวกเขา Canvas โดยรวมมีอยู่ในเบราว์เซอร์มือถือทั้งหมด SVG ไม่ทำงานบน Android 2.0- 2.3 รุ่นแรก (เท่าที่ฉันรู้)

ใช่ Canvas ไม่สามารถปรับขนาดได้ แต่มันเร็วมากที่คุณสามารถวาดทั้งผืนผ้าใบได้เร็วขึ้นจากนั้นเบราว์เซอร์ที่สามารถเลื่อนดูพอร์ตได้

จากมุมมองของฉันการปรับให้เหมาะสมของ Microsoft นั้นหมายถึงการใช้ Canvas เป็นเอนจิ้น GDI ปกติและติดตั้งแอปพลิเคชั่นกราฟิกอย่างที่เราทำเพื่อ Windows


1
สำหรับการแสดงผลกราฟิกที่บริสุทธิ์ฉันเห็นด้วยอย่างยิ่ง สิ่งหนึ่งที่ SVG / VML เสนอให้ผ้าใบซึ่งไม่ได้เป็น DOM และลำดับชั้นของเหตุการณ์เนื่องจากองค์ประกอบที่วาดเป็นวัตถุ DOM เต็มแทนที่จะเป็นบิตแมปแบบดิบ ด้วย Canvas, X / Y click coords ดีที่สุดที่สามารถทำได้ ไม่ว่าจะด้วยวิธีใดโครงการนี้มีมานานกว่าดังนั้นจึงไม่เกี่ยวข้องในขณะนี้ แต่ขอขอบคุณสำหรับคำตอบของคุณ :)
ลุคเดนนิส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.